Files
finally-a-monolithic-linux-…/app/app.go
T
2026-08-06 11:58:34 -07:00

48 lines
989 B
Go

package app
import (
"finally-a-monolithic-linux-hw-monitor/app/mem"
proc "finally-a-monolithic-linux-hw-monitor/app/proc"
"fmt"
"os"
"os/signal"
"strings"
"syscall"
"time"
)
func Run() {
// Clear terminal screen and hide cursor
fmt.Print("\033[2J\033[?25l")
// Ensure cursor is restored when exiting (Ctrl+C / SIGTERM)
cleanupChannel := make(chan os.Signal, 1)
signal.Notify(cleanupChannel, os.Interrupt, syscall.SIGTERM)
go func() {
<-cleanupChannel
// Restore cursor and move below output
fmt.Print("\033[?25h\n")
os.Exit(0)
}()
p, _ := proc.GetProc()
m, _ := mem.GetMem()
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for {
console := &strings.Builder{}
// Move cursor to top-left (0,0) without clearing full buffer (flicker-free)
fmt.Fprint(console, "\033[H")
proc.RenderProc(console, &p)
mem.RenderMem(console, &m)
fmt.Fprint(console, "\nPress Ctrl+C to exit.\033[K\n")
fmt.Print(console.String())
<-ticker.C
}
}