70 lines
2.1 KiB
Go
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()
|
|
}
|