summaryrefslogtreecommitdiffstats
path: root/widgets/temp.go
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/temp.go')
-rw-r--r--widgets/temp.go58
1 files changed, 40 insertions, 18 deletions
diff --git a/widgets/temp.go b/widgets/temp.go
index 7c0a358..a01853e 100644
--- a/widgets/temp.go
+++ b/widgets/temp.go
@@ -7,16 +7,17 @@ import (
"time"
ui "github.com/gizak/termui/v3"
+ "github.com/prometheus/client_golang/prometheus"
+ "github.com/xxxserxxx/gotop/devices"
"github.com/xxxserxxx/gotop/utils"
)
-type TempScale int
+type TempScale rune
const (
- Celsius TempScale = 0
- Fahrenheit = 1
- Disabled = 2
+ Celsius TempScale = 'C'
+ Fahrenheit = 'F'
)
type TempWidget struct {
@@ -27,6 +28,7 @@ type TempWidget struct {
TempLowColor ui.Color
TempHighColor ui.Color
TempScale TempScale
+ tempsMetric map[string]prometheus.Gauge
}
// TODO: state:deferred 156 Added temperatures for NVidia GPUs (azak-azkaran/master). Crashes on non-nvidia machines.
@@ -57,6 +59,20 @@ func NewTempWidget(tempScale TempScale) *TempWidget {
return self
}
+func (self *TempWidget) EnableMetric() {
+ self.tempsMetric = make(map[string]prometheus.Gauge)
+ for k, v := range self.Data {
+ gauge := prometheus.NewGauge(prometheus.GaugeOpts{
+ Namespace: "gotop",
+ Subsystem: "temp",
+ Name: k,
+ })
+ gauge.Set(float64(v))
+ prometheus.MustRegister(gauge)
+ self.tempsMetric[k] = gauge
+ }
+}
+
// Custom Draw method instead of inheriting from a generic Widget.
func (self *TempWidget) Draw(buf *ui.Buffer) {
self.Block.Draw(buf)
@@ -85,20 +101,26 @@ func (self *TempWidget) Draw(buf *ui.Buffer) {
image.Pt(self.Inner.Min.X, self.Inner.Min.Y+y),
)
- // TODO: state:merge #184 or #177 degree symbol (BartWillems/master, fleaz/master)
- switch self.TempScale {
- case Fahrenheit:
- buf.SetString(
- fmt.Sprintf("%3dF", self.Data[key]),
- ui.NewStyle(fg),
- image.Pt(self.Inner.Max.X-4, self.Inner.Min.Y+y),
- )
- case Celsius:
- buf.SetString(
- fmt.Sprintf("%3dC", self.Data[key]),
- ui.NewStyle(fg),
- image.Pt(self.Inner.Max.X-4, self.Inner.Min.Y+y),
- )
+ if self.tempsMetric != nil {
+ self.tempsMetric[key].Set(float64(self.Data[key]))
+ }
+ temperature := fmt.Sprintf("%3d°%c", self.Data[key], self.TempScale)
+
+ buf.SetString(
+ temperature,
+ ui.NewStyle(fg),
+ image.Pt(self.Inner.Max.X-(len(temperature)-1), self.Inner.Min.Y+y),
+ )
+ }
+}
+
+func (self *TempWidget) update() {
+ devices.UpdateTemps(self.Data)
+ for name, val := range self.Data {
+ if self.TempScale == Fahrenheit {
+ self.Data[name] = utils.CelsiusToFahrenheit(val)
+ } else {
+ self.Data[name] = val
}
}
}