diff options
author | Sean E. Russell <ser@ser1.net> | 2020-02-18 11:27:29 -0600 |
---|---|---|
committer | Sean E. Russell <ser@ser1.net> | 2020-02-18 11:27:29 -0600 |
commit | 8ee5950308ef08a4f2805486660c677a3dac1bd1 (patch) | |
tree | 03b49ea3644e4c90fb06678b535e13da622fb2de /widgets | |
parent | 6c9e51470e6fef4282d22f419ac2deaf8435195d (diff) |
Adds a battery gauge.
Diffstat (limited to 'widgets')
-rw-r--r-- | widgets/batterygauge.go | 77 |
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) + } +} |