diff --git a/dashboards/resource-manager/README.md b/dashboards/resource-manager/README.md index 8697769d3a..cded715679 100644 --- a/dashboards/resource-manager/README.md +++ b/dashboards/resource-manager/README.md @@ -5,28 +5,9 @@ import follow the Grafana docs [here](https://grafana.com/docs/grafana/latest/da ## Setup -To make sure you're emitting the metrics you'll have to create the Resource -Manager with a StatsTraceReporter. By default metrics will be sent to -prometheus.DefaultRegisterer. To use a different Registerer use the libp2p -option libp2p.PrometheusRegisterer. For example: - -``` go -import ( - // ... - rcmgr "github.com/libp2p/go-libp2p/p2p/host/resource-manager" - - "github.com/prometheus/client_golang/prometheus" -) - - func SetupResourceManager() (network.ResourceManager, error) { - str, err := rcmgr.NewStatsTraceReporter() - if err != nil { - return nil, err - } - - return rcmgr.NewResourceManager(limiter, rcmgr.WithTraceReporter(str)) - } -``` +Metrics are enabled by default. By default, metrics will be sent to +`prometheus.DefaultRegisterer`. To use a different Registerer use the libp2p +option `libp2p.PrometheusRegisterer`. ## Updating Dashboard json diff --git a/p2p/host/resource-manager/README.md b/p2p/host/resource-manager/README.md index 9533eadb04..9371832c9a 100644 --- a/p2p/host/resource-manager/README.md +++ b/p2p/host/resource-manager/README.md @@ -47,15 +47,10 @@ limits := cfg.Build(scaledDefaultLimits) // The resource manager expects a limiter, se we create one from our limits. limiter := rcmgr.NewFixedLimiter(limits) -// (Optional if you want metrics) -rcmgr.MustRegisterWith(prometheus.DefaultRegisterer) -str, err := rcmgr.NewStatsTraceReporter() -if err != nil { - panic(err) -} - +// Metrics are enabled by default. If you want to disable metrics, use the +// WithMetricsDisabled option // Initialize the resource manager -rm, err := rcmgr.NewResourceManager(limiter, rcmgr.WithTraceReporter(str)) +rm, err := rcmgr.NewResourceManager(limiter, rcmgr.WithMetricsDisabled()) if err != nil { panic(err) } diff --git a/p2p/host/resource-manager/rcmgr.go b/p2p/host/resource-manager/rcmgr.go index 7f15bb7685..188a171f56 100644 --- a/p2p/host/resource-manager/rcmgr.go +++ b/p2p/host/resource-manager/rcmgr.go @@ -20,8 +20,9 @@ var log = logging.Logger("rcmgr") type resourceManager struct { limits Limiter - trace *trace - metrics *metrics + trace *trace + metrics *metrics + disableMetrics bool allowlist *Allowlist @@ -141,6 +142,28 @@ func NewResourceManager(limits Limiter, opts ...Option) (network.ResourceManager } } + if !r.disableMetrics { + var sr TraceReporter + sr, err := NewStatsTraceReporter() + if err != nil { + log.Errorf("failed to initialise StatsTraceReporter %s", err) + } else { + if r.trace == nil { + r.trace = &trace{} + } + found := false + for _, rep := range r.trace.reporters { + if rep == sr { + found = true + break + } + } + if !found { + r.trace.reporters = append(r.trace.reporters, sr) + } + } + } + if err := r.trace.Start(limits); err != nil { return nil, err } diff --git a/p2p/host/resource-manager/stats.go b/p2p/host/resource-manager/stats.go index b9f90b8449..fd0772948a 100644 --- a/p2p/host/resource-manager/stats.go +++ b/p2p/host/resource-manager/stats.go @@ -160,6 +160,13 @@ func MustRegisterWith(reg prometheus.Registerer) { ) } +func WithMetricsDisabled() Option { + return func(r *resourceManager) error { + r.disableMetrics = true + return nil + } +} + // StatsTraceReporter reports stats on the resource manager using its traces. type StatsTraceReporter struct{} diff --git a/p2p/test/resource-manager/rcmgr_test.go b/p2p/test/resource-manager/rcmgr_test.go index e4a1227685..4cdd5f2f05 100644 --- a/p2p/test/resource-manager/rcmgr_test.go +++ b/p2p/test/resource-manager/rcmgr_test.go @@ -317,14 +317,10 @@ func TestReadmeExample(t *testing.T) { // The resource manager expects a limiter, se we create one from our limits. limiter := rcmgr.NewFixedLimiter(limits) - // (Optional if you want metrics) Construct the OpenCensus metrics reporter. - str, err := rcmgr.NewStatsTraceReporter() - if err != nil { - panic(err) - } - + // Metrics are enabled by default. If you want to disable metrics, use the + // WithMetricsDisabled option // Initialize the resource manager - rm, err := rcmgr.NewResourceManager(limiter, rcmgr.WithTraceReporter(str)) + rm, err := rcmgr.NewResourceManager(limiter, rcmgr.WithMetricsDisabled()) if err != nil { panic(err) } @@ -334,6 +330,5 @@ func TestReadmeExample(t *testing.T) { if err != nil { panic(err) } - host.Close() }