package cli import ( "bufio" "fmt" "log" "os" loadaverage "rpi5-health/internal/load_average" "rpi5-health/internal/memory" "rpi5-health/internal/processor" "rpi5-health/internal/uptime" "strings" ) func Listen() { reader := bufio.NewScanner(os.Stdin) fmt.Print("> ") for { if !reader.Scan() { log.Println("Program terminated (SIGINT)") return } if err := reader.Err(); err != nil { log.Printf("Console input error: %v\n", err) return } text := strings.TrimSpace(reader.Text()) switch text { case "exit": return case "meminfo": memInfo, _ := memory.GetRamInformation() const GB = 1024 * 1024 * 1024 fmt.Printf("Total memory: %.2fGB\n", float64(memInfo.SystemMemory)/GB) fmt.Printf("Available memory: %.2fGB\n", float64(memInfo.AvailableMemory)/GB) fmt.Printf("Used memory: %.2fGB\n", float64(memInfo.GetUsedMemory())/GB) case "cpuinfo": _, kernel, usage, idle := processor.GetCPUInformation().Usage() fmt.Printf("Total time spent idling: %.2f%%\n", idle) fmt.Printf("Total time spent in kernel mode: %.2f%%\n", kernel) fmt.Printf("Total time spent in user mode: %.2f%%\n", usage) case "uptime": uptime, _ := uptime.GetUptimeInformation() fmt.Printf("Total uptime: %s\n", uptime.FormatSeconds()) case "loadavg": loadAvg, _ := loadaverage.GetLoadAverage() fmt.Printf("Load average: L1: %.2f | L5: %.2f | L15: %.2f\n", loadAvg.Load1, loadAvg.Load5, loadAvg.Load15) } } }