Skip to content
This repository was archived by the owner on Jul 31, 2023. It is now read-only.

Commit 948b0cb

Browse files
authored
Refactor gauge api with options. (#1086)
* Refactor gauge api with options. * fixed review comments.
1 parent 41e54b8 commit 948b0cb

File tree

4 files changed

+145
-39
lines changed

4 files changed

+145
-39
lines changed

metric/examples_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ func ExampleRegistry_AddInt64Gauge() {
2525
r := metric.NewRegistry()
2626
// TODO: allow exporting from a registry
2727

28-
g, _ := r.AddInt64Gauge("active_request", "Number of active requests, per method.", metricdata.UnitDimensionless, "method")
28+
g, _ := r.AddInt64Gauge("active_request",
29+
metric.WithDescription("Number of active requests, per method."),
30+
metric.WithUnit(metricdata.UnitDimensionless),
31+
metric.WithLabelKeys("method"))
2932

3033
http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
3134
e, _ := g.GetEntry(metricdata.NewLabelValue(request.Method))

metric/gauge_test.go

Lines changed: 84 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ import (
2626

2727
func TestGauge(t *testing.T) {
2828
r := NewRegistry()
29-
f, _ := r.AddFloat64Gauge("TestGauge", "", "", "k1", "k2")
29+
30+
f, _ := r.AddFloat64Gauge("TestGauge",
31+
WithLabelKeys("k1", "k2"))
3032
e, _ := f.GetEntry(metricdata.LabelValue{}, metricdata.LabelValue{})
3133
e.Set(5)
3234
e, _ = f.GetEntry(metricdata.NewLabelValue("k1v1"), metricdata.LabelValue{})
@@ -81,16 +83,15 @@ func TestGauge(t *testing.T) {
8183
}
8284

8385
func TestGaugeMetricDescriptor(t *testing.T) {
84-
unit := metricdata.UnitDimensionless
8586
r := NewRegistry()
8687

87-
gf, _ := r.AddFloat64Gauge("float64_gauge", "", unit)
88+
gf, _ := r.AddFloat64Gauge("float64_gauge")
8889
compareType(gf.g.desc.Type, metricdata.TypeGaugeFloat64, t)
89-
gi, _ := r.AddInt64Gauge("int64_gauge", "", unit)
90+
gi, _ := r.AddInt64Gauge("int64_gauge")
9091
compareType(gi.g.desc.Type, metricdata.TypeGaugeInt64, t)
91-
dgf, _ := r.AddFloat64DerivedGauge("derived_float64_gauge", "", unit)
92+
dgf, _ := r.AddFloat64DerivedGauge("derived_float64_gauge")
9293
compareType(dgf.g.desc.Type, metricdata.TypeGaugeFloat64, t)
93-
dgi, _ := r.AddInt64DerivedGauge("derived_int64_gauge", "", unit)
94+
dgi, _ := r.AddInt64DerivedGauge("derived_int64_gauge")
9495
compareType(dgi.g.desc.Type, metricdata.TypeGaugeInt64, t)
9596
}
9697

@@ -100,9 +101,68 @@ func compareType(got, want metricdata.Type, t *testing.T) {
100101
}
101102
}
102103

104+
func TestGaugeMetricOptionDesc(t *testing.T) {
105+
r := NewRegistry()
106+
name := "testOptDesc"
107+
gf, _ := r.AddFloat64Gauge(name, WithDescription("test"))
108+
want := metricdata.Descriptor{
109+
Name: name,
110+
Description: "test",
111+
Type: metricdata.TypeGaugeFloat64,
112+
}
113+
got := gf.g.desc
114+
if !cmp.Equal(got, want) {
115+
t.Errorf("metric option description: got %v, want %v\n", got, want)
116+
}
117+
}
118+
119+
func TestGaugeMetricOptionUnit(t *testing.T) {
120+
r := NewRegistry()
121+
name := "testOptUnit"
122+
gf, _ := r.AddFloat64Gauge(name, WithUnit(metricdata.UnitMilliseconds))
123+
want := metricdata.Descriptor{
124+
Name: name,
125+
Unit: metricdata.UnitMilliseconds,
126+
Type: metricdata.TypeGaugeFloat64,
127+
}
128+
got := gf.g.desc
129+
if !cmp.Equal(got, want) {
130+
t.Errorf("metric descriptor: got %v, want %v\n", got, want)
131+
}
132+
}
133+
134+
func TestGaugeMetricOptionLabelKeys(t *testing.T) {
135+
r := NewRegistry()
136+
name := "testOptUnit"
137+
gf, _ := r.AddFloat64Gauge(name, WithLabelKeys("k1", "k3"))
138+
want := metricdata.Descriptor{
139+
Name: name,
140+
LabelKeys: []string{"k1", "k3"},
141+
Type: metricdata.TypeGaugeFloat64,
142+
}
143+
got := gf.g.desc
144+
if !cmp.Equal(got, want) {
145+
t.Errorf("metric descriptor: got %v, want %v\n", got, want)
146+
}
147+
}
148+
149+
func TestGaugeMetricOptionDefault(t *testing.T) {
150+
r := NewRegistry()
151+
name := "testOptUnit"
152+
gf, _ := r.AddFloat64Gauge(name)
153+
want := metricdata.Descriptor{
154+
Name: name,
155+
Type: metricdata.TypeGaugeFloat64,
156+
}
157+
got := gf.g.desc
158+
if !cmp.Equal(got, want) {
159+
t.Errorf("metric descriptor: got %v, want %v\n", got, want)
160+
}
161+
}
162+
103163
func TestFloat64Entry_Add(t *testing.T) {
104164
r := NewRegistry()
105-
g, _ := r.AddFloat64Gauge("g", "", metricdata.UnitDimensionless)
165+
g, _ := r.AddFloat64Gauge("g")
106166
e, _ := g.GetEntry()
107167
e.Add(0)
108168
ms := r.Read()
@@ -125,7 +185,7 @@ func TestFloat64Entry_Add(t *testing.T) {
125185

126186
func TestFloat64Gauge_Add_NegativeTotals(t *testing.T) {
127187
r := NewRegistry()
128-
g, _ := r.AddFloat64Gauge("g", "", metricdata.UnitDimensionless)
188+
g, _ := r.AddFloat64Gauge("g")
129189
e, _ := g.GetEntry()
130190
e.Add(-1.0)
131191
ms := r.Read()
@@ -136,7 +196,7 @@ func TestFloat64Gauge_Add_NegativeTotals(t *testing.T) {
136196

137197
func TestInt64GaugeEntry_Add(t *testing.T) {
138198
r := NewRegistry()
139-
g, _ := r.AddInt64Gauge("g", "", metricdata.UnitDimensionless)
199+
g, _ := r.AddInt64Gauge("g")
140200
e, _ := g.GetEntry()
141201
e.Add(0)
142202
ms := r.Read()
@@ -153,7 +213,7 @@ func TestInt64GaugeEntry_Add(t *testing.T) {
153213

154214
func TestInt64Gauge_Add_NegativeTotals(t *testing.T) {
155215
r := NewRegistry()
156-
g, _ := r.AddInt64Gauge("g", "", metricdata.UnitDimensionless)
216+
g, _ := r.AddInt64Gauge("g")
157217
e, _ := g.GetEntry()
158218
e.Add(-1)
159219
ms := r.Read()
@@ -164,24 +224,24 @@ func TestInt64Gauge_Add_NegativeTotals(t *testing.T) {
164224

165225
func TestGaugeWithSameNameDiffType(t *testing.T) {
166226
r := NewRegistry()
167-
r.AddInt64Gauge("g", "", metricdata.UnitDimensionless)
168-
_, gotErr := r.AddFloat64Gauge("g", "", metricdata.UnitDimensionless)
227+
r.AddInt64Gauge("g")
228+
_, gotErr := r.AddFloat64Gauge("g")
169229
if gotErr == nil {
170230
t.Errorf("got: nil, want error: %v", errGaugeExistsWithDiffType)
171231
}
172-
_, gotErr = r.AddInt64DerivedGauge("g", "", metricdata.UnitDimensionless)
232+
_, gotErr = r.AddInt64DerivedGauge("g")
173233
if gotErr == nil {
174234
t.Errorf("got: nil, want error: %v", errGaugeExistsWithDiffType)
175235
}
176-
_, gotErr = r.AddFloat64DerivedGauge("g", "", metricdata.UnitDimensionless)
236+
_, gotErr = r.AddFloat64DerivedGauge("g")
177237
if gotErr == nil {
178238
t.Errorf("got: nil, want error: %v", errGaugeExistsWithDiffType)
179239
}
180240
}
181241

182242
func TestGaugeWithLabelMismatch(t *testing.T) {
183243
r := NewRegistry()
184-
g, _ := r.AddInt64Gauge("g", "", metricdata.UnitDimensionless, "k1")
244+
g, _ := r.AddInt64Gauge("g", WithLabelKeys("k1"))
185245
_, gotErr := g.GetEntry(metricdata.NewLabelValue("k1v2"), metricdata.NewLabelValue("k2v2"))
186246
if gotErr == nil {
187247
t.Errorf("got: nil, want error: %v", errKeyValueMismatch)
@@ -222,7 +282,7 @@ func TestRaceCondition(t *testing.T) {
222282
for i := 0; i < 5; i++ {
223283
go func(k int) {
224284
for j := 0; j < 5; j++ {
225-
g, _ := r.AddInt64Gauge(fmt.Sprintf("g%d%d", k, j), "", metricdata.UnitDimensionless)
285+
g, _ := r.AddInt64Gauge(fmt.Sprintf("g%d%d", k, j))
226286
e, _ := g.GetEntry()
227287
e.Add(1)
228288
}
@@ -272,7 +332,7 @@ func (q *queueInt64) ToInt64() int64 {
272332
func TestInt64DerivedGaugeEntry_Add(t *testing.T) {
273333
r := NewRegistry()
274334
q := &queueInt64{3}
275-
g, _ := r.AddInt64DerivedGauge("g", "", metricdata.UnitDimensionless, "k1", "k2")
335+
g, _ := r.AddInt64DerivedGauge("g", WithLabelKeys("k1", "k2"))
276336
err := g.UpsertEntry(q.ToInt64, metricdata.NewLabelValue("k1v1"), metricdata.LabelValue{})
277337
if err != nil {
278338
t.Errorf("want: nil, got: %v", err)
@@ -290,7 +350,7 @@ func TestInt64DerivedGaugeEntry_Add(t *testing.T) {
290350

291351
func TestInt64DerivedGaugeEntry_AddWithNilObj(t *testing.T) {
292352
r := NewRegistry()
293-
g, _ := r.AddInt64DerivedGauge("g", "", metricdata.UnitDimensionless, "k1", "k2")
353+
g, _ := r.AddInt64DerivedGauge("g", WithLabelKeys("k1", "k2"))
294354
gotErr := g.UpsertEntry(nil, metricdata.NewLabelValue("k1v1"), metricdata.LabelValue{})
295355
if gotErr == nil {
296356
t.Errorf("expected error but got nil")
@@ -300,7 +360,7 @@ func TestInt64DerivedGaugeEntry_AddWithNilObj(t *testing.T) {
300360
func TestInt64DerivedGaugeEntry_AddWithInvalidLabels(t *testing.T) {
301361
r := NewRegistry()
302362
q := &queueInt64{3}
303-
g, _ := r.AddInt64DerivedGauge("g", "", metricdata.UnitDimensionless, "k1", "k2")
363+
g, _ := r.AddInt64DerivedGauge("g", WithLabelKeys("k1", "k2"))
304364
gotErr := g.UpsertEntry(q.ToInt64, metricdata.NewLabelValue("k1v1"))
305365
if gotErr == nil {
306366
t.Errorf("expected error but got nil")
@@ -311,7 +371,7 @@ func TestInt64DerivedGaugeEntry_Update(t *testing.T) {
311371
r := NewRegistry()
312372
q := &queueInt64{3}
313373
q2 := &queueInt64{5}
314-
g, _ := r.AddInt64DerivedGauge("g", "", metricdata.UnitDimensionless, "k1", "k2")
374+
g, _ := r.AddInt64DerivedGauge("g", WithLabelKeys("k1", "k2"))
315375
g.UpsertEntry(q.ToInt64, metricdata.NewLabelValue("k1v1"), metricdata.LabelValue{})
316376
gotErr := g.UpsertEntry(q2.ToInt64, metricdata.NewLabelValue("k1v1"), metricdata.LabelValue{})
317377
if gotErr != nil {
@@ -334,7 +394,7 @@ func (q *queueFloat64) ToFloat64() float64 {
334394
func TestFloat64DerivedGaugeEntry_Add(t *testing.T) {
335395
r := NewRegistry()
336396
q := &queueFloat64{5.0}
337-
g, _ := r.AddFloat64DerivedGauge("g", "", metricdata.UnitDimensionless, "k1", "k2")
397+
g, _ := r.AddFloat64DerivedGauge("g", WithLabelKeys("k1", "k2"))
338398
err := g.UpsertEntry(q.ToFloat64, metricdata.NewLabelValue("k1v1"), metricdata.LabelValue{})
339399
if err != nil {
340400
t.Errorf("want: nil, got: %v", err)
@@ -352,7 +412,7 @@ func TestFloat64DerivedGaugeEntry_Add(t *testing.T) {
352412

353413
func TestFloat64DerivedGaugeEntry_AddWithNilObj(t *testing.T) {
354414
r := NewRegistry()
355-
g, _ := r.AddFloat64DerivedGauge("g", "", metricdata.UnitDimensionless, "k1", "k2")
415+
g, _ := r.AddFloat64DerivedGauge("g", WithLabelKeys("k1", "k2"))
356416
gotErr := g.UpsertEntry(nil, metricdata.NewLabelValue("k1v1"), metricdata.LabelValue{})
357417
if gotErr == nil {
358418
t.Errorf("expected error but got nil")
@@ -362,7 +422,7 @@ func TestFloat64DerivedGaugeEntry_AddWithNilObj(t *testing.T) {
362422
func TestFloat64DerivedGaugeEntry_AddWithInvalidLabels(t *testing.T) {
363423
r := NewRegistry()
364424
q := &queueFloat64{3}
365-
g, _ := r.AddFloat64DerivedGauge("g", "", metricdata.UnitDimensionless, "k1", "k2")
425+
g, _ := r.AddFloat64DerivedGauge("g", WithLabelKeys("k1", "k2"))
366426
gotErr := g.UpsertEntry(q.ToFloat64, metricdata.NewLabelValue("k1v1"))
367427
if gotErr == nil {
368428
t.Errorf("expected error but got nil")
@@ -373,7 +433,7 @@ func TestFloat64DerivedGaugeEntry_Update(t *testing.T) {
373433
r := NewRegistry()
374434
q := &queueFloat64{3.0}
375435
q2 := &queueFloat64{5.0}
376-
g, _ := r.AddFloat64DerivedGauge("g", "", metricdata.UnitDimensionless, "k1", "k2")
436+
g, _ := r.AddFloat64DerivedGauge("g", WithLabelKeys("k1", "k2"))
377437
g.UpsertEntry(q.ToFloat64, metricdata.NewLabelValue("k1v1"), metricdata.LabelValue{})
378438
gotErr := g.UpsertEntry(q2.ToFloat64, metricdata.NewLabelValue("k1v1"), metricdata.LabelValue{})
379439
if gotErr != nil {

metric/metricexport/reader_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,10 @@ func (e *metricExporter) ExportMetrics(ctx context.Context, metrics []*metricdat
5353
func init() {
5454
r := metric.NewRegistry()
5555
metricproducer.GlobalManager().AddProducer(r)
56-
g, _ := r.AddInt64Gauge("active_request", "Number of active requests, per method.", metricdata.UnitDimensionless, "method")
56+
g, _ := r.AddInt64Gauge("active_request",
57+
metric.WithDescription("Number of active requests, per method."),
58+
metric.WithUnit(metricdata.UnitDimensionless),
59+
metric.WithLabelKeys("method"))
5760
gaugeEntry, _ = g.GetEntry(metricdata.NewLabelValue("foo"))
5861
}
5962

0 commit comments

Comments
 (0)