package metrics import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/tree" "github.com/prometheus/client_golang/prometheus" ) const namespace = "frostfs_node" type NodeMetrics struct { objectServiceMetrics engineMetrics stateMetrics replicatorMetrics writeCacheMetrics *writeCacheMetrics treeService *treeServiceMetrics epoch metric[prometheus.Gauge] gc *gcMetrics } func NewNodeMetrics() *NodeMetrics { objectService := newObjectServiceMetrics() objectService.register() engine := newEngineMetrics() engine.register() state := newStateMetrics() state.register() replicator := newReplicatorMetrics() replicator.register() treeService := newTreeServiceMetrics() treeService.register() epoch := newGauge(prometheus.GaugeOpts{ Namespace: namespace, Subsystem: innerRingSubsystem, Name: "epoch", Help: "Current epoch as seen by inner-ring node.", }) mustRegister(epoch) writeCacheMetrics := newWriteCacheMetrics() writeCacheMetrics.register() gc := newGCMetrics() gc.register() return &NodeMetrics{ objectServiceMetrics: objectService, engineMetrics: engine, stateMetrics: state, replicatorMetrics: replicator, treeService: treeService, epoch: epoch, writeCacheMetrics: writeCacheMetrics, gc: gc, } } // SetEpoch updates epoch metric. func (m *NodeMetrics) SetEpoch(epoch uint64) { m.epoch.value.Set(float64(epoch)) } // WriteCache returns WriteCache metrics. func (m *NodeMetrics) WriteCache() WriteCacheMetrics { if m == nil { return nil } return m.writeCacheMetrics } func (m *NodeMetrics) TreeService() tree.MetricsRegister { return m.treeService } func (m *NodeMetrics) GC() GCMetrics { return m.gc }