package metrics

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

const innerRingSubsystem = "ir"

// InnerRingServiceMetrics contains metrics collected by inner ring.
type InnerRingServiceMetrics struct {
	epoch  prometheus.Gauge
	health prometheus.Gauge
}

// NewInnerRingMetrics returns new instance of metrics collectors for inner ring.
func NewInnerRingMetrics() InnerRingServiceMetrics {
	var (
		epoch = prometheus.NewGauge(prometheus.GaugeOpts{
			Namespace: namespace,
			Subsystem: innerRingSubsystem,
			Name:      "epoch",
			Help:      "Current epoch as seen by inner-ring node.",
		})
		health = prometheus.NewGauge(prometheus.GaugeOpts{
			Namespace: namespace,
			Subsystem: innerRingSubsystem,
			Name:      "health",
			Help:      "Current inner-ring node state.",
		})
	)

	prometheus.MustRegister(epoch)
	prometheus.MustRegister(health)

	return InnerRingServiceMetrics{
		epoch:  epoch,
		health: health,
	}
}

// SetEpoch updates epoch metrics.
func (m InnerRingServiceMetrics) SetEpoch(epoch uint64) {
	m.epoch.Set(float64(epoch))
}

// SetHealth updates health metrics.
func (m InnerRingServiceMetrics) SetHealth(s int32) {
	m.health.Set(float64(s))
}