...
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
16 func ReportAlarmMetrics(alarms []*etcdserverpb.AlarmMember) {
17 reportAlarm(EtcdAlarmStateCorrupt, alarms, Corrupt)
18 reportAlarm(EtcdAlarmStateNospace, alarms, NoSpace)
19 }
20
21
22
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