diff --git a/config.go b/config.go index 634631b..62bda63 100644 --- a/config.go +++ b/config.go @@ -23,7 +23,10 @@ type MyConfig struct { // LA Plugin LA bool `json:"la,omitempty"` - Mem bool `json:"mem,omitempty"` + Mem struct { + Enabled bool `json:"enabled,omitempty"` + ShowSwap bool `json:"show_swap,omitempty"` + } `json:"mem,omitempty"` Clock struct { Enabled bool `json:"enabled,omitempty"` diff --git a/i3status-go-example.json b/i3status-go-example.json index b306a75..8220de3 100644 --- a/i3status-go-example.json +++ b/i3status-go-example.json @@ -7,7 +7,10 @@ "la" : true, // Memory stats -"mem" : true, +"mem" : { + "enabled": true, + "show_swap": false +}, // Just clock "clock": { diff --git a/main.go b/main.go index 3a0738c..3933e63 100644 --- a/main.go +++ b/main.go @@ -70,7 +70,7 @@ func main() { syscall.SIGUSR2) // Populate memory stats - if Conf.Mem { + if Conf.Mem.Enabled { go UpdateMemStats() } @@ -160,9 +160,15 @@ func main() { j = append(j, b) } - if Conf.Mem { + if Conf.Mem.Enabled { var b I3BarOutBlock - b.FullText = fmt.Sprintf("M:%d%% SHM:%dM SW:%dM", Memory.Usedpct, Memory.Shared, Memory.Swap) + + if Conf.Mem.ShowSwap { + b.FullText = fmt.Sprintf("M:%d%% SHM:%dM SW:%dM", Memory.Usedpct, Memory.Shared, Memory.Swap) + } else { + b.FullText = fmt.Sprintf("M:%d%% SHM:%dM", Memory.Usedpct, Memory.Shared) + } + j = append(j, b) } diff --git a/memory.go b/memory.go index dbfa535..9fc9e75 100644 --- a/memory.go +++ b/memory.go @@ -1,6 +1,7 @@ package main import ( + "log" "time" "github.com/shirou/gopsutil/mem" @@ -19,14 +20,38 @@ var Memory Mem // UpdateMemStats parses mem info stats. func UpdateMemStats() { for { - v, _ := mem.VirtualMemory() + v, err := mem.VirtualMemory() - if Memory.Usedpct != int64(v.UsedPercent) || Memory.Shared != int64(v.Shared/1024/1024) || - Memory.Swap != int64(v.SwapTotal-v.SwapFree) { - Memory.Usedpct = int64(v.UsedPercent) - Memory.Shared = int64(v.Shared / 1024 / 1024) - Memory.Swap = int64(v.SwapTotal - v.SwapFree) - UpdateReady <- true + if err != nil { + log.Printf("Unable to get memory statistics: %s", err) + time.Sleep(1 * time.Second) + + continue + } + + sw, err := mem.SwapMemory() + + if err != nil { + log.Printf("Unable to get swap statistics: %s", err) + time.Sleep(1 * time.Second) + + continue + } + + if Conf.Mem.ShowSwap { + if Memory.Usedpct != int64(v.UsedPercent) || Memory.Shared != int64(v.Shared/1024/1024) || + Memory.Swap != int64(v.SwapTotal-v.SwapFree) { + Memory.Usedpct = int64(v.UsedPercent) + Memory.Shared = int64(v.Shared / 1024 / 1024) + Memory.Swap = int64(sw.Total - sw.Free) + UpdateReady <- true + } + } else { + if Memory.Usedpct != int64(v.UsedPercent) || Memory.Shared != int64(v.Shared/1024/1024) { + Memory.Usedpct = int64(v.UsedPercent) + Memory.Shared = int64(v.Shared / 1024 / 1024) + UpdateReady <- true + } } time.Sleep(3 * time.Second)