]> go.fuhry.dev Git - runtime.git/commitdiff
apcupsd exporter: allow specifying NIS address and nominal power as flags
authorDan Fuhry <dan@fuhry.com>
Tue, 16 Apr 2024 12:36:50 +0000 (08:36 -0400)
committerDan Fuhry <dan@fuhry.com>
Tue, 16 Apr 2024 12:36:50 +0000 (08:36 -0400)
metrics/apcups_exporter/main.go

index d4ccbd9ff84b27bdbec5dc9343ad5a17c57ca2f8..54e7b715b69d4c778800749335959f9400b1f5f7 100644 (file)
@@ -25,6 +25,11 @@ func main() {
        var apcConn *apcupsd.Client
        var err error
        var sdNotifyOnce sync.Once
+       var apcUpsdAddr = "127.0.0.1:3551"
+       var nominalPower = 0
+
+       flag.StringVar(&apcUpsdAddr, "apcupsd-addr", apcUpsdAddr, "address at which apcupsd can be contacted")
+       flag.IntVar(&nominalPower, "apcupsd-nominal-power", nominalPower, "max power output in W for the UPS - only used if apcupsd does not specify NOMPOWER")
 
        ctx, _ := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
        flag.Parse()
@@ -56,7 +61,7 @@ func main() {
                select {
                case <-ticker.C:
                        if apcConn == nil {
-                               apcConn, err = apcupsd.Dial("tcp", "127.0.0.1:3551")
+                               apcConn, err = apcupsd.Dial("tcp", apcUpsdAddr)
                                if err != nil {
                                        log.Default().Errorf("error getting status from apcupsd: %v", err)
                                        continue
@@ -79,11 +84,15 @@ func main() {
                        sdNotifyOnce.Do(func() {
                                daemon.SdNotify(false, daemon.SdNotifyReady)
                        })
+                       nomPower := status.NominalPower
+                       if nomPower == 0 {
+                               nomPower = nominalPower
+                       }
                        metrics.lineVoltage.Set(status.LineVoltage)
                        metrics.loadPercentage.Set(status.LoadPercent)
                        metrics.secondsLeft.Set(status.TimeLeft.Seconds())
                        metrics.chargePct.Set(status.BatteryChargePercent)
-                       metrics.powerConsumption.Set(float64(status.NominalPower) * (status.LoadPercent / 100))
+                       metrics.powerConsumption.Set(float64(nomPower) * (status.LoadPercent / 100))
                        if _, ok := metrics.stateMap[status.Status]; !ok {
                                metrics.stateMap[status.Status] = metrics.state.WithLabelValues(mbclient.KV{"state": status.Status})
                        }