Browse Source

tsweb/varz: add support for ShardedInt metrics

Fixes tailscale/corp#33236

Signed-off-by: Anton Tolchanov <[email protected]>
Anton Tolchanov 4 months ago
parent
commit
072e6a39f4
3 changed files with 20 additions and 1 deletions
  1. 1 1
      cmd/stund/depaware.txt
  2. 4 0
      tsweb/varz/varz.go
  3. 15 0
      tsweb/varz/varz_test.go

+ 1 - 1
cmd/stund/depaware.txt

@@ -58,7 +58,7 @@ tailscale.com/cmd/stund dependencies: (generated by github.com/tailscale/depawar
         tailscale.com/net/stun                                       from tailscale.com/net/stunserver
         tailscale.com/net/stunserver                                 from tailscale.com/cmd/stund
         tailscale.com/net/tsaddr                                     from tailscale.com/tsweb
-        tailscale.com/syncs                                          from tailscale.com/metrics
+        tailscale.com/syncs                                          from tailscale.com/metrics+
         tailscale.com/tailcfg                                        from tailscale.com/version
         tailscale.com/tsweb                                          from tailscale.com/cmd/stund+
         tailscale.com/tsweb/promvarz                                 from tailscale.com/cmd/stund

+ 4 - 0
tsweb/varz/varz.go

@@ -25,6 +25,7 @@ import (
 
 	"golang.org/x/exp/constraints"
 	"tailscale.com/metrics"
+	"tailscale.com/syncs"
 	"tailscale.com/types/logger"
 	"tailscale.com/version"
 )
@@ -136,6 +137,9 @@ func writePromExpVar(w io.Writer, prefix string, kv expvar.KeyValue) {
 	case *expvar.Int:
 		fmt.Fprintf(w, "# TYPE %s %s\n%s %v\n", name, cmp.Or(typ, "counter"), name, v.Value())
 		return
+	case *syncs.ShardedInt:
+		fmt.Fprintf(w, "# TYPE %s %s\n%s %v\n", name, cmp.Or(typ, "counter"), name, v.Value())
+		return
 	case *expvar.Float:
 		fmt.Fprintf(w, "# TYPE %s %s\n%s %v\n", name, cmp.Or(typ, "gauge"), name, v.Value())
 		return

+ 15 - 0
tsweb/varz/varz_test.go

@@ -13,6 +13,7 @@ import (
 	"testing"
 
 	"tailscale.com/metrics"
+	"tailscale.com/syncs"
 	"tailscale.com/tstest"
 	"tailscale.com/util/racebuild"
 	"tailscale.com/version"
@@ -283,6 +284,20 @@ foo_foo_a 1
 foo_foo_b 1
 `) + "\n",
 		},
+		{
+			"metrics_sharded_int",
+			"counter_api_status_code",
+			func() *syncs.ShardedInt {
+				m := syncs.NewShardedInt()
+				m.Add(40)
+				m.Add(2)
+				return m
+			}(),
+			strings.TrimSpace(`
+# TYPE api_status_code counter
+api_status_code 42
+			`) + "\n",
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {