oh-my-posh/src/segments/sysinfo.go
2022-05-03 15:35:59 +02:00

94 lines
2 KiB
Go

package segments
import (
"oh-my-posh/environment"
"oh-my-posh/properties"
cpu "github.com/shirou/gopsutil/v3/cpu"
disk "github.com/shirou/gopsutil/v3/disk"
load "github.com/shirou/gopsutil/v3/load"
mem "github.com/shirou/gopsutil/v3/mem"
)
type SystemInfo struct {
props properties.Properties
env environment.Environment
Precision int
// mem
PhysicalTotalMemory uint64
PhysicalAvailableMemory uint64
PhysicalFreeMemory uint64
PhysicalPercentUsed float64
SwapTotalMemory uint64
SwapFreeMemory uint64
SwapPercentUsed float64
// cpu
Times float64
CPU []cpu.InfoStat
// load
Load1 float64
Load5 float64
Load15 float64
// disk
Disks map[string]disk.IOCountersStat
}
const (
// Precision number of decimal places to show
Precision properties.Property = "precision"
)
func (s *SystemInfo) Template() string {
return " {{ round .PhysicalPercentUsed .Precision }} "
}
func (s *SystemInfo) Enabled() bool {
if s.PhysicalPercentUsed == 0 && s.SwapPercentUsed == 0 {
return false
}
return true
}
func (s *SystemInfo) Init(props properties.Properties, env environment.Environment) {
s.props = props
s.env = env
s.Precision = s.props.GetInt(Precision, 2)
// mem
memStat, err := mem.VirtualMemory()
if err == nil {
s.PhysicalTotalMemory = memStat.Total
s.PhysicalAvailableMemory = memStat.Available
s.PhysicalFreeMemory = memStat.Free
s.PhysicalPercentUsed = memStat.UsedPercent
}
swapStat, err := mem.SwapMemory()
if err == nil {
s.SwapTotalMemory = swapStat.Total
s.SwapFreeMemory = swapStat.Free
s.SwapPercentUsed = swapStat.UsedPercent
}
// load
loadStat, err := load.Avg()
if err == nil {
s.Load1 = loadStat.Load1
s.Load5 = loadStat.Load5
s.Load15 = loadStat.Load15
}
// times
processorTimes, err := cpu.Percent(0, false)
if err == nil {
s.Times = processorTimes[0]
}
// cpu
processors, err := cpu.Info()
if err == nil {
s.CPU = processors
}
// disk
diskIO, err := disk.IOCounters()
if err == nil {
s.Disks = diskIO
}
}