forked from quic-go/quic-go
metrics: simplify constructor for the default connection tracer (#4555)
This commit is contained in:
@@ -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")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user