mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-12-21 12:30:24 +00:00
41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
|
package metrics
|
||
|
|
||
|
import (
|
||
|
"github.com/prometheus/client_golang/prometheus"
|
||
|
"k8s.io/client-go/tools/leaderelection"
|
||
|
)
|
||
|
|
||
|
// This file is copied and adapted from k8s.io/component-base/metrics/prometheus/clientgo/leaderelection
|
||
|
// which registers metrics to the k8s legacy Registry. We require very
|
||
|
// similar functionality, but must register metrics to a different Registry.
|
||
|
|
||
|
var (
|
||
|
leaderGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
||
|
Name: "leader_election_master_status",
|
||
|
Help: "Gauge of if the reporting system is master of the relevant lease, 0 indicates backup, 1 indicates master. 'name' is the string used to identify the lease. Please make sure to group by name.",
|
||
|
}, []string{"name"})
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
Registry.MustRegister(leaderGauge)
|
||
|
leaderelection.SetProvider(leaderelectionMetricsProvider{})
|
||
|
}
|
||
|
|
||
|
type leaderelectionMetricsProvider struct{}
|
||
|
|
||
|
func (leaderelectionMetricsProvider) NewLeaderMetric() leaderelection.SwitchMetric {
|
||
|
return &switchAdapter{gauge: leaderGauge}
|
||
|
}
|
||
|
|
||
|
type switchAdapter struct {
|
||
|
gauge *prometheus.GaugeVec
|
||
|
}
|
||
|
|
||
|
func (s *switchAdapter) On(name string) {
|
||
|
s.gauge.WithLabelValues(name).Set(1.0)
|
||
|
}
|
||
|
|
||
|
func (s *switchAdapter) Off(name string) {
|
||
|
s.gauge.WithLabelValues(name).Set(0.0)
|
||
|
}
|