mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2025-01-07 09:17:26 -08:00
94 lines
2 KiB
Go
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
|
|
}
|
|
}
|