diff options
Diffstat (limited to 'widgets/temp.go')
-rw-r--r-- | widgets/temp.go | 58 |
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 } } } |