package cpu import ( "finally-a-monolithic-linux-hw-monitor/app/cpu/proc" "fmt" "strings" ) func RenderCPU(console *strings.Builder, proc *proc.Proc) { // Move cursor to top-left (0,0) without clearing full buffer (flicker-free) fmt.Fprint(console, "\033[H") fmt.Fprintf(console, "=== %s ===\n", proc.Model()) RenderTemperatureSensors(console, proc) RenderPowerSensors(console, proc) RenderClockSensors(console, proc) } func RenderTemperatureSensors(console *strings.Builder, proc *proc.Proc) { temps, _ := proc.SensorReader.ReadTemperatureSensors() fmt.Fprint(console, "--- Temperature ---\n") for _, sensor := range temps { tempC := sensor.TempC tempF := (tempC * 9 / 5) + 32 // \033[K clears from cursor to end of line (prevents lingering chars) fmt.Fprintf(console, "%-16s | %.3f °C (%.3f °F)\033[K\n", sensor.Name, tempC, tempF) } } func RenderPowerSensors(console *strings.Builder, proc *proc.Proc) { fmt.Fprint(console, "--- Power ---\n") power, _ := proc.SensorReader.ReadPowerSensors() for _, sensor := range power { // \033[K clears from cursor to end of line (prevents lingering chars) fmt.Fprintf(console, "%-16s | %.3f W\033[K\n", sensor.Name, sensor.Watts) } } func RenderClockSensors(console *strings.Builder, proc *proc.Proc) { fmt.Fprint(console, "--- Clock Frequency ---\n") power, _ := proc.SensorReader.ReadClockSensors() for _, sensor := range power { // \033[K clears from cursor to end of line (prevents lingering chars) fmt.Fprintf(console, "%-16s | %.3f GHz\033[K\n", sensor.Name, sensor.FrequencyGHz) } }