summaryrefslogtreecommitdiffstats
path: root/widgets/batterygauge.go
diff options
context:
space:
mode:
authorSean E. Russell <ser@ser1.net>2020-02-18 11:27:29 -0600
committerSean E. Russell <ser@ser1.net>2020-02-18 11:27:29 -0600
commit8ee5950308ef08a4f2805486660c677a3dac1bd1 (patch)
tree03b49ea3644e4c90fb06678b535e13da622fb2de /widgets/batterygauge.go
parent6c9e51470e6fef4282d22f419ac2deaf8435195d (diff)
Adds a battery gauge.
Diffstat (limited to 'widgets/batterygauge.go')
-rw-r--r--widgets/batterygauge.go77
1 files changed, 77 insertions, 0 deletions
diff --git a/widgets/batterygauge.go b/widgets/batterygauge.go
new file mode 100644
index 0000000..04b1434
--- /dev/null
+++ b/widgets/batterygauge.go
@@ -0,0 +1,77 @@
+package widgets
+
+import (
+ "fmt"
+ "log"
+ //"math"
+ //"strconv"
+ "time"
+
+ "github.com/distatus/battery"
+ "github.com/prometheus/client_golang/prometheus"
+
+ . "github.com/xxxserxxx/gotop/termui"
+)
+
+type BatteryGauge struct {
+ *Gauge
+ metric prometheus.Gauge
+}
+
+func NewBatteryGauge() *BatteryGauge {
+ self := &BatteryGauge{Gauge: NewGauge()}
+ self.Title = " Power Level "
+
+ self.update()
+
+ go func() {
+ for range time.NewTicker(time.Second).C {
+ self.Lock()
+ self.update()
+ self.Unlock()
+ }
+ }()
+
+ return self
+}
+
+func (b *BatteryGauge) EnableMetric() {
+ bats, err := battery.GetAll()
+ if err != nil {
+ log.Printf("error setting up metrics: %v", err)
+ return
+ }
+ mx := 0.0
+ cu := 0.0
+ for _, bat := range bats {
+ mx += bat.Full
+ cu += bat.Current
+ gauge := prometheus.NewGauge(prometheus.GaugeOpts{
+ Namespace: "gotop",
+ Subsystem: "battery",
+ Name: "total",
+ })
+ gauge.Set(cu / mx)
+ b.metric = gauge
+ prometheus.MustRegister(gauge)
+ }
+}
+
+func (self *BatteryGauge) update() {
+ bats, err := battery.GetAll()
+ if err != nil {
+ log.Printf("error setting up metrics: %v", err)
+ return
+ }
+ mx := 0.0
+ cu := 0.0
+ for _, bat := range bats {
+ mx += bat.Full
+ cu += bat.Current
+ }
+ self.Percent = int((cu / mx) * 100.0)
+ self.Label = fmt.Sprintf("%d%%", self.Percent)
+ if self.metric != nil {
+ self.metric.Set(cu / mx)
+ }
+}