From 58042e2de39c9c2827fe0bad7c45e8631369325f Mon Sep 17 00:00:00 2001 From: Anton Tolchanov Date: Tue, 13 Jan 2026 11:43:03 -0500 Subject: [PATCH] metrics: add a NewSet and Set.NewLabelMap helpers Updates tailscale/corp#31174 Signed-off-by: Anton Tolchanov --- metrics/metrics.go | 15 +++++++++++++++ net/stunserver/stunserver.go | 13 +++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/metrics/metrics.go b/metrics/metrics.go index 010a32d02..092b56c41 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -29,6 +29,21 @@ type Set struct { expvar.Map } +// NewSet creates and publishes a new Set with the given name. +func NewSet(name string) *Set { + s := &Set{} + expvar.Publish(name, s) + return s +} + +// NewLabelMap creates a new LabelMap metric with the given +// metric name and label name, and adds it to the Set. +func (s *Set) NewLabelMap(metric, label string) *LabelMap { + m := &LabelMap{Label: label} + s.Set(metric, m) + return m +} + // LabelMap is a string-to-Var map variable that satisfies the // expvar.Var interface. // diff --git a/net/stunserver/stunserver.go b/net/stunserver/stunserver.go index b45bb6331..7397675ca 100644 --- a/net/stunserver/stunserver.go +++ b/net/stunserver/stunserver.go @@ -8,7 +8,6 @@ package stunserver import ( "context" "errors" - "expvar" "io" "log" "net" @@ -20,9 +19,9 @@ import ( ) var ( - stats = new(metrics.Set) - stunDisposition = &metrics.LabelMap{Label: "disposition"} - stunAddrFamily = &metrics.LabelMap{Label: "family"} + stats = metrics.NewSet("stun") + stunDisposition = stats.NewLabelMap("counter_requests", "disposition") + stunAddrFamily = stats.NewLabelMap("counter_addrfamily", "family") stunReadError = stunDisposition.Get("read_error") stunNotSTUN = stunDisposition.Get("not_stun") stunWriteError = stunDisposition.Get("write_error") @@ -32,12 +31,6 @@ var ( stunIPv6 = stunAddrFamily.Get("ipv6") ) -func init() { - stats.Set("counter_requests", stunDisposition) - stats.Set("counter_addrfamily", stunAddrFamily) - expvar.Publish("stun", stats) -} - type STUNServer struct { ctx context.Context // ctx signals service shutdown pc *net.UDPConn // pc is the UDP listener