package metrics import ( "git.frostfs.info/TrueCloudLab/frostfs-observability/metrics" "github.com/prometheus/client_golang/prometheus" ) type ReplicatorMetrics interface { IncInFlightRequest() DecInFlightRequest() IncProcessedObjects() AddPayloadSize(size int64) } type replicatorMetrics struct { inFlightRequests prometheus.Gauge processedObjects prometheus.Counter totalReplicatedPayloadSize prometheus.Counter } func (m *replicatorMetrics) IncInFlightRequest() { m.inFlightRequests.Inc() } func (m *replicatorMetrics) DecInFlightRequest() { m.inFlightRequests.Dec() } func (m *replicatorMetrics) IncProcessedObjects() { m.processedObjects.Inc() } func (m *replicatorMetrics) AddPayloadSize(size int64) { m.totalReplicatedPayloadSize.Add(float64(size)) } func newReplicatorMetrics() *replicatorMetrics { return &replicatorMetrics{ inFlightRequests: newReplicatorGauge("in_flight_requests_total", "Number of in-flight requests"), processedObjects: newReplicatorCounter("processed_objects_total", "Number of objects processed since the node startup"), totalReplicatedPayloadSize: newReplicatorCounter("total_replicated_payload_size_bytes", "Total size of payloads replicated"), } } func newReplicatorCounter(name, help string) prometheus.Counter { return metrics.NewCounter(prometheus.CounterOpts{ Namespace: namespace, Subsystem: replicatorSubsystem, Name: name, Help: help, }) } func newReplicatorGauge(name, help string) prometheus.Gauge { return metrics.NewGauge(prometheus.GaugeOpts{ Namespace: namespace, Subsystem: replicatorSubsystem, Name: name, Help: help, }) }