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

70 lines
2.1 KiB
Go

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()
}