metrics: simplify constructor for the default connection tracer (#4555)

This commit is contained in:
Marten Seemann
2024-06-05 18:16:18 +08:00
committed by GitHub
parent 44e0147f2e
commit 91221b4a05
2 changed files with 22 additions and 23 deletions

View File

@@ -5,6 +5,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"net" "net"
"sync"
"time" "time"
"github.com/quic-go/quic-go" "github.com/quic-go/quic-go"
@@ -51,25 +52,27 @@ var (
) )
) )
// DefaultTracer returns a callback that creates a metrics ConnectionTracer. var (
// The ConnectionTracer returned can be set on the quic.Config for a new connection. defaultServerConnectionTracerOnce, defaultClientConnectionTracerOnce sync.Once
// It should be reused across QUIC connections. defaultServerConnectionTracer, defaultClientConnectionTracer *logging.ConnectionTracer
func DefaultTracer() func(_ context.Context, p logging.Perspective, _ logging.ConnectionID) *logging.ConnectionTracer { )
return DefaultTracerWithRegisterer(prometheus.DefaultRegisterer)
}
// DefaultTracerWithRegisterer returns a callback that creates a metrics ConnectionTracer // DefaultConnectionTracer returns a callback that creates a metrics ConnectionTracer.
// using a given Prometheus registerer. // The ConnectionTracer returned can be set on the quic.Config for a new connection.
func DefaultTracerWithRegisterer(registerer prometheus.Registerer) func(_ context.Context, p logging.Perspective, _ logging.ConnectionID) *logging.ConnectionTracer { func DefaultConnectionTracer(_ context.Context, p logging.Perspective, _ logging.ConnectionID) *logging.ConnectionTracer {
return func(_ context.Context, p logging.Perspective, _ logging.ConnectionID) *logging.ConnectionTracer { switch p {
switch p { case logging.PerspectiveClient:
case logging.PerspectiveClient: defaultClientConnectionTracerOnce.Do(func() {
return NewClientConnectionTracerWithRegisterer(registerer) defaultClientConnectionTracer = NewClientConnectionTracerWithRegisterer(prometheus.DefaultRegisterer)
case logging.PerspectiveServer: })
return NewServerConnectionTracerWithRegisterer(registerer) return defaultClientConnectionTracer
default: case logging.PerspectiveServer:
panic("invalid perspective") defaultServerConnectionTracerOnce.Do(func() {
} defaultServerConnectionTracer = NewServerConnectionTracerWithRegisterer(prometheus.DefaultRegisterer)
})
return defaultServerConnectionTracer
default:
panic("invalid perspective")
} }
} }

View File

@@ -22,15 +22,11 @@ When using multiple `Transport`s, it is recommended to use the metrics tracer st
Set a metrics connection tracer on the `Config`: Set a metrics connection tracer on the `Config`:
```go ```go
tracer := metrics.DefaultTracer()
quic.Config{ quic.Config{
Tracer: tracer, Tracer: metrics.DefaultConnectionTracer,
} }
``` ```
It is recommended to use the same connection tracer returned by `DefaultTracer` on the `Config`s for all connections.
Running: Running:
```shell ```shell
docker-compose up docker-compose up