package mem import ( "finally-a-monolithic-linux-hw-monitor/app/mem/drivers" "fmt" "strings" ) func RenderMem(console *strings.Builder, mem *Mem) { fmt.Fprintf(console, "=== %s ===\n", "Memory") RenderUsageSensors(console, mem) RenderHardwareSensors(console, mem) } func RenderUsageSensors(console *strings.Builder, mem *Mem) { usage, _ := mem.SensorReader.ReadUsageSensors() fmt.Fprintf(console, "--- Usage ---\n") fmt.Fprintf(console, "%-16s | %.2f GiB\033[K\n", "Total", usage.TotalGB) fmt.Fprintf(console, "%-16s | %.2f GiB (%.2f%%) \033[K\n", "Used", usage.UsedGB, usage.UsedPercent) fmt.Fprintf(console, "%-16s | %.2f GiB\033[K\n", "Avail", usage.AvailableGB) } func RenderHardwareSensors(console *strings.Builder, mem *Mem) { hardware, _ := mem.SensorReader.ReadHardwareSensors() for i := range len(hardware.ModelNames) { fmt.Fprintf(console, "--- RAM Module %d ---\n", i) modelName := hardware.ModelNames[i] fmt.Fprintf(console, "%-16s | %-16s \033[K\n", "Model Name", modelName) generation := hardware.Generations[i] speed := hardware.Speeds[i] fmt.Fprintf(console, "%-16s | %s@%s \033[K\n", "Speed", generation, speed) formFactor := hardware.FormFactors[i] fmt.Fprintf(console, "%-16s | %s \033[K\n", "Form Factor", formFactor) } } type Mem struct { SensorReader MemSensorReader } func GetMem() (Mem, error) { memInfoDriver := drivers.NewMemInfoDriver() dmiDecodeDriver := drivers.NewDmiDecodeDriver() reader := &StandardMemSensorReader{ UsageReader: memInfoDriver, HardwareReader: dmiDecodeDriver, } return Mem{ SensorReader: reader, }, nil } type MemSensorReader interface { ReadUsageSensors() (drivers.MemoryUsage, error) ReadHardwareSensors() (drivers.MemoryHardware, error) } type StandardMemSensorReader struct { UsageReader drivers.UsageDriver HardwareReader drivers.HardwareDriver } func (r *StandardMemSensorReader) ReadUsageSensors() (drivers.MemoryUsage, error) { return r.UsageReader.ReadUsageSensors() } func (r *StandardMemSensorReader) ReadHardwareSensors() (drivers.MemoryHardware, error) { return r.HardwareReader.ReadHardwareSensors() }