78
package main
import (
"errors"
"fmt"
"os"
"os/signal"
"time"
"git.sophuwu.com/statlog/types"
)
func fatal(e error) {
if e != nil {
fmt.Println("\033[?1049l\033[?25h")
fmt.Println("Error:", e)
os.Exit(1)
}
}
const gpuTempFile = "/sys/class/hwmon/hwmon1/temp1_input"
func getGPU() (int, error) {
b, err := os.ReadFile(gpuTempFile)
if err != nil { return 0, err }
i := 0
_, err = fmt.Sscanf(string(b), "%d", &i)
if err != nil { return 0, err }
return i/1000, err
}
func main() {
fmt.Println("\033[?25l\033[?1049h\033[2J")
defer fmt.Println("\033[?1049l\033[?25h")
ch := make(chan os.Signal, 1)
bl := true
go func() {
signal.Notify(ch, os.Interrupt, os.Kill)
<-ch
bl = false
}()
var s string
var ss string
var e error
var tempGPU func(w, h, val int) (string, error)
tempGPU, e = types.Graph("GPU Temp", 100)
fatal(e)
var w, h, t int
prnt := func() {
fmt.Printf("\033[2J\033[1;1H\r%s\n", s)
time.Sleep(250 * time.Millisecond)
}
ERR := func() bool {
if errors.Is(e, types.ErrTooNarrow) {
s = "terminal too narrow"
prnt()
time.Sleep(100 * time.Millisecond)
return true
}
fatal(e)
return false
}
for bl {
s = ""
w, h = types.TermSize()
t, e = getGPU()
if ERR() {
continue
}
ss, e = tempGPU(w, h-10, t)
if ERR() {
continue
}
// print gpu temp graph
s += ss + "\n"
prnt()
}
}