package metrics

import "github.com/prometheus/client_golang/prometheus"

const namespace = "neofs_node"

type StorageMetrics struct {
	objectServiceMetrics
	engineMetrics
	epoch prometheus.Gauge
}

func NewStorageMetrics() *StorageMetrics {
	objectService := newObjectServiceMetrics()
	objectService.register()

	engine := newEngineMetrics()
	engine.register()

	epoch := prometheus.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: innerRingSubsystem,
		Name:      "epoch",
		Help:      "Current epoch as seen by inner-ring node.",
	})
	prometheus.MustRegister(epoch)

	return &StorageMetrics{
		objectServiceMetrics: objectService,
		engineMetrics:        engine,
		epoch:                epoch,
	}
}

// SetEpoch updates epoch metric.
func (m *StorageMetrics) SetEpoch(epoch uint64) {
	m.epoch.Set(float64(epoch))
}