tsweb: split promvarz into an optional dependency

Allows the use of tsweb without pulling in all of the heavy prometheus
client libraries, protobuf and so on.

Updates #15160

Signed-off-by: David Anderson <dave@tailscale.com>
This commit is contained in:
David Anderson
2025-03-13 15:29:58 -07:00
committed by Dave Anderson
parent 74ee749386
commit daa5635ba6
12 changed files with 58 additions and 26 deletions

View File

@@ -11,12 +11,21 @@ import (
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/common/expfmt"
"tailscale.com/tsweb"
"tailscale.com/tsweb/varz"
)
// Handler returns Prometheus metrics exported by our expvar converter
func init() {
tsweb.PrometheusHandler.Set(registerVarz)
}
func registerVarz(debug *tsweb.DebugHandler) {
debug.Handle("varz", "Metrics (Prometheus)", http.HandlerFunc(handler))
}
// handler returns Prometheus metrics exported by our expvar converter
// and the official Prometheus client.
func Handler(w http.ResponseWriter, r *http.Request) {
func handler(w http.ResponseWriter, r *http.Request) {
if err := gatherNativePrometheusMetrics(w); err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))

View File

@@ -23,7 +23,7 @@ func TestHandler(t *testing.T) {
testVar1.Set(42)
testVar2.Set(4242)
svr := httptest.NewServer(http.HandlerFunc(Handler))
svr := httptest.NewServer(http.HandlerFunc(handler))
defer svr.Close()
want := `