From a3dc259e3b57dd386fd05ce6b57ad14d7940238d Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sat, 16 Dec 2023 01:14:56 +0000 Subject: [PATCH] fix(battery): handle no batteries being present --- battery/ioreg.go | 6 ++++++ prom/collector.go | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/battery/ioreg.go b/battery/ioreg.go index cd3d8c5..5491e40 100644 --- a/battery/ioreg.go +++ b/battery/ioreg.go @@ -3,6 +3,7 @@ package battery import ( + "bytes" "os/exec" "howett.net/plist" @@ -39,6 +40,11 @@ func getAllRaw() ([]*batteryRaw, error) { } batteries := []*batteryRaw{} + + if len(bytes.TrimSpace(b)) == 0 { + return batteries, nil + } + _, err = plist.Unmarshal(b, &batteries) if err != nil { return nil, err diff --git a/prom/collector.go b/prom/collector.go index 7963064..233e679 100644 --- a/prom/collector.go +++ b/prom/collector.go @@ -17,7 +17,9 @@ const ( ) type Collector struct { - descInfo *prometheus.Desc + descInfo *prometheus.Desc + descBatteryCount *prometheus.Desc + descBatteryCellDisconnectCount *prometheus.Desc descChargeRateAmps *prometheus.Desc descChargeRateWatts *prometheus.Desc @@ -47,6 +49,14 @@ func NewCollector(namespace string) *Collector { []string{serialLabel, deviceNameLabel, builtInLabel}, nil, ), + descBatteryCount: prometheus.NewDesc( + prometheus.BuildFQName( + namespace, "battery", "count", + ), + "Total number of batteries.", + nil, + nil, + ), descBatteryCellDisconnectCount: prometheus.NewDesc( prometheus.BuildFQName( namespace, "battery", "cell_disconnect_count", @@ -191,6 +201,7 @@ func NewCollector(namespace string) *Collector { func (c *Collector) Describe(ch chan<- *prometheus.Desc) { ch <- c.descInfo + ch <- c.descBatteryCount ch <- c.descBatteryCellDisconnectCount ch <- c.descChargeRateAmps ch <- c.descChargeRateWatts @@ -220,6 +231,12 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) { return } + ch <- prometheus.MustNewConstMetric( + c.descBatteryCount, + prometheus.GaugeValue, + float64(len(batteries)), + ) + for _, battery := range batteries { labels := []string{battery.Serial}