mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 04:55:31 +00:00
metrics: add SetInt and SetFloat helper
Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
This commit is contained in:
parent
a4945fc19e
commit
55d29a9c6d
@ -211,6 +211,26 @@ func (v *MultiLabelMap[T]) Set(key T, val expvar.Var) {
|
||||
v.m.Store(key, val)
|
||||
}
|
||||
|
||||
// SetInt sets val to the *[expvar.Int] value stored under the given map key,
|
||||
// creating it if it doesn't exist yet.
|
||||
// It does nothing if key exists but is of the wrong type.
|
||||
func (v *MultiLabelMap[T]) SetInt(key T, val int64) {
|
||||
// Set to Int; ignore otherwise.
|
||||
if iv, ok := v.getOrFill(key, newInt).(*expvar.Int); ok {
|
||||
iv.Set(val)
|
||||
}
|
||||
}
|
||||
|
||||
// SetFloat sets val to the *[expvar.Float] value stored under the given map key,
|
||||
// creating it if it doesn't exist yet.
|
||||
// It does nothing if key exists but is of the wrong type.
|
||||
func (v *MultiLabelMap[T]) SetFloat(key T, val float64) {
|
||||
// Set to Float; ignore otherwise.
|
||||
if iv, ok := v.getOrFill(key, newFloat).(*expvar.Float); ok {
|
||||
iv.Set(val)
|
||||
}
|
||||
}
|
||||
|
||||
// Add adds delta to the *[expvar.Int] value stored under the given map key,
|
||||
// creating it if it doesn't exist yet.
|
||||
// It does nothing if key exists but is of the wrong type.
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"expvar"
|
||||
"fmt"
|
||||
"io"
|
||||
"testing"
|
||||
@ -22,6 +23,12 @@ func TestMultilabelMap(t *testing.T) {
|
||||
m.Add(L2{"b", "b"}, 3)
|
||||
m.Add(L2{"a", "a"}, 1)
|
||||
|
||||
m.SetFloat(L2{"sf", "sf"}, 3.5)
|
||||
m.SetFloat(L2{"sf", "sf"}, 5.5)
|
||||
m.Set(L2{"sfunc", "sfunc"}, expvar.Func(func() any { return 3 }))
|
||||
m.SetInt(L2{"si", "si"}, 3)
|
||||
m.SetInt(L2{"si", "si"}, 5)
|
||||
|
||||
cur := func() string {
|
||||
var buf bytes.Buffer
|
||||
m.Do(func(kv KeyValue[L2]) {
|
||||
@ -33,7 +40,7 @@ func TestMultilabelMap(t *testing.T) {
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
if g, w := cur(), "a/a=1,a/b=2,b/b=3,b/c=4"; g != w {
|
||||
if g, w := cur(), "a/a=1,a/b=2,b/b=3,b/c=4,sf/sf=5.5,sfunc/sfunc=3,si/si=5"; g != w {
|
||||
t.Errorf("got %q; want %q", g, w)
|
||||
}
|
||||
|
||||
@ -43,6 +50,9 @@ func TestMultilabelMap(t *testing.T) {
|
||||
metricname{foo="a",bar="b"} 2
|
||||
metricname{foo="b",bar="b"} 3
|
||||
metricname{foo="b",bar="c"} 4
|
||||
metricname{foo="sf",bar="sf"} 5.5
|
||||
metricname{foo="sfunc",bar="sfunc"} 3
|
||||
metricname{foo="si",bar="si"} 5
|
||||
`
|
||||
if got := buf.String(); got != want {
|
||||
t.Errorf("promtheus output = %q; want %q", got, want)
|
||||
@ -50,7 +60,7 @@ func TestMultilabelMap(t *testing.T) {
|
||||
|
||||
m.Delete(L2{"b", "b"})
|
||||
|
||||
if g, w := cur(), "a/a=1,a/b=2,b/c=4"; g != w {
|
||||
if g, w := cur(), "a/a=1,a/b=2,b/c=4,sf/sf=5.5,sfunc/sfunc=3,si/si=5"; g != w {
|
||||
t.Errorf("got %q; want %q", g, w)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user