From 5ae44462803f436223091809d775c9b711fd4f45 Mon Sep 17 00:00:00 2001 From: Anton Nikiforov Date: Mon, 13 Mar 2023 09:21:28 +0300 Subject: [PATCH] [#50] ir: Add Health status Signed-off-by: Anton Nikiforov --- pkg/innerring/state.go | 3 +++ pkg/metrics/innerring.go | 20 +++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/pkg/innerring/state.go b/pkg/innerring/state.go index b7551049..903d9c87 100644 --- a/pkg/innerring/state.go +++ b/pkg/innerring/state.go @@ -167,6 +167,9 @@ func (s *Server) ResetEpochTimer(h uint32) error { func (s *Server) setHealthStatus(hs control.HealthStatus) { s.healthStatus.Store(hs) + if s.metrics != nil { + s.metrics.SetHealth(int32(hs)) + } } // HealthStatus returns the current health status of the IR application. diff --git a/pkg/metrics/innerring.go b/pkg/metrics/innerring.go index 487edc19..55b0aa08 100644 --- a/pkg/metrics/innerring.go +++ b/pkg/metrics/innerring.go @@ -2,11 +2,12 @@ package metrics import "github.com/prometheus/client_golang/prometheus" -const innerRingSubsystem = "object" +const innerRingSubsystem = "ir" // InnerRingServiceMetrics contains metrics collected by inner ring. type InnerRingServiceMetrics struct { - epoch prometheus.Gauge + epoch prometheus.Gauge + health prometheus.Gauge } // NewInnerRingMetrics returns new instance of metrics collectors for inner ring. @@ -18,12 +19,20 @@ func NewInnerRingMetrics() InnerRingServiceMetrics { 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, + epoch: epoch, + health: health, } } @@ -31,3 +40,8 @@ func NewInnerRingMetrics() InnerRingServiceMetrics { 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)) +}