diff --git a/p2p/transport/quic/options.go b/p2p/transport/quic/options.go index a09df5545e..75b2dbca09 100644 --- a/p2p/transport/quic/options.go +++ b/p2p/transport/quic/options.go @@ -4,6 +4,7 @@ type Option func(opts *config) error type config struct { disableReuseport bool + metrics bool } func (cfg *config) apply(opts ...Option) error { @@ -22,3 +23,11 @@ func DisableReuseport() Option { return nil } } + +// WithMetrics enables Prometheus metrics collection. +func WithMetrics() Option { + return func(cfg *config) error { + cfg.metrics = true + return nil + } +} diff --git a/p2p/transport/quic/tracer.go b/p2p/transport/quic/tracer.go index c5bbf71493..20de893287 100644 --- a/p2p/transport/quic/tracer.go +++ b/p2p/transport/quic/tracer.go @@ -13,16 +13,12 @@ import ( "github.com/lucas-clemente/quic-go/qlog" ) -var tracer logging.Tracer +var qlogTracer logging.Tracer func init() { - tracers := []logging.Tracer{&metricsTracer{}} if qlogDir := os.Getenv("QLOGDIR"); len(qlogDir) > 0 { - if qlogger := initQlogger(qlogDir); qlogger != nil { - tracers = append(tracers, qlogger) - } + qlogTracer = initQlogger(qlogDir) } - tracer = logging.NewMultiplexedTracer(tracers...) } func initQlogger(qlogDir string) logging.Tracer { diff --git a/p2p/transport/quic/transport.go b/p2p/transport/quic/transport.go index c8149bc00f..1ed3b05f23 100644 --- a/p2p/transport/quic/transport.go +++ b/p2p/transport/quic/transport.go @@ -26,6 +26,7 @@ import ( logging "github.com/ipfs/go-log/v2" "github.com/lucas-clemente/quic-go" + quiclogging "github.com/lucas-clemente/quic-go/logging" "github.com/minio/sha256-simd" ) @@ -199,7 +200,16 @@ func NewTransport(key ic.PrivKey, psk pnet.PSK, gater connmgr.ConnectionGater, r if _, err := io.ReadFull(keyReader, qconfig.StatelessResetKey); err != nil { return nil, err } - qconfig.Tracer = tracer + var tracers []quiclogging.Tracer + if qlogTracer != nil { + tracers = append(tracers, qlogTracer) + } + if cfg.metrics { + tracers = append(tracers, &metricsTracer{}) + } + if len(tracers) > 0 { + qconfig.Tracer = quiclogging.NewMultiplexedTracer(tracers...) + } tr := &transport{ privKey: key,