...

Source file src/edge-infra.dev/pkg/sds/etcd/manager/internal/observability/alarms.go

Documentation: edge-infra.dev/pkg/sds/etcd/manager/internal/observability

     1  package observability
     2  
     3  import (
     4  	"slices"
     5  
     6  	"github.com/prometheus/client_golang/prometheus"
     7  	"go.etcd.io/etcd/api/v3/etcdserverpb"
     8  )
     9  
    10  const (
    11  	Corrupt = "CORRUPT"
    12  	NoSpace = "NOSPACE"
    13  )
    14  
    15  // ReportAlarmMetrics reports the status of the alarms for each member in the etcd cluster
    16  func ReportAlarmMetrics(alarms []*etcdserverpb.AlarmMember) {
    17  	reportAlarm(EtcdAlarmStateCorrupt, alarms, Corrupt)
    18  	reportAlarm(EtcdAlarmStateNospace, alarms, NoSpace)
    19  }
    20  
    21  // Checks if the slice contains any alarms of the target alarm type
    22  // Records the result on the corresponding metric
    23  func reportAlarm(metric *prometheus.GaugeVec, alarms []*etcdserverpb.AlarmMember, target string) {
    24  	checkAlarmFunc := func(alarmMember *etcdserverpb.AlarmMember) bool {
    25  		return alarmMember.Alarm.String() == target
    26  	}
    27  
    28  	if slices.ContainsFunc(alarms, checkAlarmFunc) {
    29  		metric.WithLabelValues().Set(1)
    30  	} else {
    31  		metric.WithLabelValues().Set(0)
    32  	}
    33  }
    34  

View as plain text