summaryrefslogtreecommitdiffstats
path: root/widgets
diff options
context:
space:
mode:
authorSean E. Russell <ser@ser1.net>2020-02-19 10:40:45 -0600
committerSean E. Russell <ser@ser1.net>2020-02-19 10:40:45 -0600
commit66ad0f878540dee82ae2c2b5c561754b6480a157 (patch)
treea0db34b627902bff0a9d0b80715694fa75dbabe4 /widgets
parent5e779839015531bd723d962755e477e85e13d081 (diff)
parent3db7c7480aa0b35fef4a737b16bdde6fd95f9d64 (diff)
Merge branch 'gauge' into v3.4.x
Diffstat (limited to 'widgets')
-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)
+ }
+}