mirror of
https://github.com/tailscale/tailscale.git
synced 2025-10-27 20:19:31 +00:00
feature/featuretags: make usermetrics modular
Saves ~102 KB from the min build. Updates #12614 Change-Id: Ie1d4f439321267b9f98046593cb289ee3c4d6249 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
committed by
Brad Fitzpatrick
parent
ea8e991d69
commit
d816454a88
@@ -10,15 +10,15 @@ package usermetric
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"tailscale.com/metrics"
|
||||
"tailscale.com/feature/buildfeatures"
|
||||
)
|
||||
|
||||
// Metrics contains user-facing metrics that are used by multiple packages.
|
||||
type Metrics struct {
|
||||
initOnce sync.Once
|
||||
|
||||
droppedPacketsInbound *metrics.MultiLabelMap[DropLabels]
|
||||
droppedPacketsOutbound *metrics.MultiLabelMap[DropLabels]
|
||||
droppedPacketsInbound *MultiLabelMap[DropLabels]
|
||||
droppedPacketsOutbound *MultiLabelMap[DropLabels]
|
||||
}
|
||||
|
||||
// DropReason is the reason why a packet was dropped.
|
||||
@@ -55,6 +55,9 @@ type DropLabels struct {
|
||||
|
||||
// initOnce initializes the common metrics.
|
||||
func (r *Registry) initOnce() {
|
||||
if !buildfeatures.HasUserMetrics {
|
||||
return
|
||||
}
|
||||
r.m.initOnce.Do(func() {
|
||||
r.m.droppedPacketsInbound = NewMultiLabelMapWithRegistry[DropLabels](
|
||||
r,
|
||||
@@ -73,13 +76,13 @@ func (r *Registry) initOnce() {
|
||||
|
||||
// DroppedPacketsOutbound returns the outbound dropped packet metric, creating it
|
||||
// if necessary.
|
||||
func (r *Registry) DroppedPacketsOutbound() *metrics.MultiLabelMap[DropLabels] {
|
||||
func (r *Registry) DroppedPacketsOutbound() *MultiLabelMap[DropLabels] {
|
||||
r.initOnce()
|
||||
return r.m.droppedPacketsOutbound
|
||||
}
|
||||
|
||||
// DroppedPacketsInbound returns the inbound dropped packet metric.
|
||||
func (r *Registry) DroppedPacketsInbound() *metrics.MultiLabelMap[DropLabels] {
|
||||
func (r *Registry) DroppedPacketsInbound() *MultiLabelMap[DropLabels] {
|
||||
r.initOnce()
|
||||
return r.m.droppedPacketsInbound
|
||||
}
|
||||
|
||||
29
util/usermetric/omit.go
Normal file
29
util/usermetric/omit.go
Normal file
@@ -0,0 +1,29 @@
|
||||
// Copyright (c) Tailscale Inc & AUTHORS
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
//go:build ts_omit_usermetrics
|
||||
|
||||
package usermetric
|
||||
|
||||
type Registry struct {
|
||||
m Metrics
|
||||
}
|
||||
|
||||
func (*Registry) NewGauge(name, help string) *Gauge { return nil }
|
||||
|
||||
type MultiLabelMap[T comparable] = noopMap[T]
|
||||
|
||||
type noopMap[T comparable] struct{}
|
||||
|
||||
type Gauge struct{}
|
||||
|
||||
func (*Gauge) Set(float64) {}
|
||||
|
||||
func NewMultiLabelMapWithRegistry[T comparable](m *Registry, name string, promType, helpText string) *MultiLabelMap[T] {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (*noopMap[T]) Add(T, int64) {}
|
||||
func (*noopMap[T]) Set(T, any) {}
|
||||
|
||||
func (r *Registry) Handler(any, any) {} // no-op HTTP handler
|
||||
@@ -1,6 +1,8 @@
|
||||
// Copyright (c) Tailscale Inc & AUTHORS
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
//go:build !ts_omit_usermetrics
|
||||
|
||||
// Package usermetric provides a container and handler
|
||||
// for user-facing metrics.
|
||||
package usermetric
|
||||
@@ -25,6 +27,10 @@ type Registry struct {
|
||||
m Metrics
|
||||
}
|
||||
|
||||
// MultiLabelMap is an alias for metrics.MultiLabelMap in the common case,
|
||||
// or an alias to a lighter type when usermetrics are omitted from the build.
|
||||
type MultiLabelMap[T comparable] = metrics.MultiLabelMap[T]
|
||||
|
||||
// NewMultiLabelMapWithRegistry creates and register a new
|
||||
// MultiLabelMap[T] variable with the given name and returns it.
|
||||
// The variable is registered with the userfacing metrics package.
|
||||
|
||||
Reference in New Issue
Block a user