Просмотр исходного кода

metrics: add LabelMap.GetIncrFunc

Updates tailscale/corp#7354

Signed-off-by: Brad Fitzpatrick <[email protected]>
Brad Fitzpatrick 2 лет назад
Родитель
Сommit
4d94d72fba
2 измененных файлов с 20 добавлено и 0 удалено
  1. 8 0
      metrics/metrics.go
  2. 12 0
      metrics/metrics_test.go

+ 8 - 0
metrics/metrics.go

@@ -45,6 +45,14 @@ func (m *LabelMap) Get(key string) *expvar.Int {
 	return m.Map.Get(key).(*expvar.Int)
 }
 
+// GetIncrFunc returns a function that increments the expvar.Int named by key.
+//
+// Most callers should not need this; it exists to satisfy an
+// interface elsewhere.
+func (m *LabelMap) GetIncrFunc(key string) func(delta int64) {
+	return m.Get(key).Add
+}
+
 // GetFloat returns a direct pointer to the expvar.Float for key, creating it
 // if necessary.
 func (m *LabelMap) GetFloat(key string) *expvar.Float {

+ 12 - 0
metrics/metrics_test.go

@@ -11,6 +11,18 @@ import (
 	"tailscale.com/tstest"
 )
 
+func TestLabelMap(t *testing.T) {
+	var m LabelMap
+	m.GetIncrFunc("foo")(1)
+	m.GetIncrFunc("bar")(2)
+	if g, w := m.Get("foo").Value(), int64(1); g != w {
+		t.Errorf("foo = %v; want %v", g, w)
+	}
+	if g, w := m.Get("bar").Value(), int64(2); g != w {
+		t.Errorf("bar = %v; want %v", g, w)
+	}
+}
+
 func TestCurrentFileDescriptors(t *testing.T) {
 	if runtime.GOOS != "linux" {
 		t.Skipf("skipping on %v", runtime.GOOS)