@@ -16,6 +16,7 @@ import (
1616 "github.com/influxdata/influxdb/logger"
1717 "github.com/influxdata/influxdb/models"
1818 "github.com/influxdata/influxdb/monitor/diagnostics"
19+ "github.com/influxdata/influxdb/pkg/limiter"
1920 "github.com/influxdata/influxdb/services/meta"
2021 "github.com/influxdata/influxdb/tsdb"
2122 "go.uber.org/zap"
@@ -100,7 +101,8 @@ type Monitor struct {
100101 // TSDB configuration for diagnostics
101102 TSDBConfig * tsdb.Config
102103
103- Logger * zap.Logger
104+ Logger * zap.Logger
105+ Limiter limiter.Rate
104106}
105107
106108// PointsWriter is a simplified interface for writing the points the monitor gathers.
@@ -150,6 +152,15 @@ func (m *Monitor) Open() error {
150152 m .RegisterDiagnosticsClient ("runtime" , & goRuntime {})
151153 m .RegisterDiagnosticsClient ("network" , & network {})
152154 m .RegisterDiagnosticsClient ("system" , & system {})
155+
156+ if m .Limiter != nil {
157+ m .RegisterDiagnosticsClient ("stats" , & stats {
158+ comp : compactThroughputStats {
159+ limiter : m .Limiter ,
160+ },
161+ })
162+ }
163+
153164 if m .TSDBConfig != nil {
154165 m .RegisterDiagnosticsClient ("config" , m .TSDBConfig )
155166 }
@@ -200,6 +211,12 @@ func (m *Monitor) writePoints(p models.Points) error {
200211 return nil
201212}
202213
214+ func (m * Monitor ) WithCompactThroughputLimiter (limiter limiter.Rate ) {
215+ m .mu .Lock ()
216+ defer m .mu .Unlock ()
217+ m .Limiter = limiter
218+ }
219+
203220// Close closes the monitor system.
204221func (m * Monitor ) Close () error {
205222 if ! m .open () {
@@ -222,6 +239,8 @@ func (m *Monitor) Close() error {
222239 m .DeregisterDiagnosticsClient ("runtime" )
223240 m .DeregisterDiagnosticsClient ("network" )
224241 m .DeregisterDiagnosticsClient ("system" )
242+ m .DeregisterDiagnosticsClient ("stats" )
243+ m .DeregisterDiagnosticsClient ("config" )
225244 return nil
226245}
227246
0 commit comments