diff --git a/src/widgets/cpu.go b/src/widgets/cpu.go index 91419cb..988e8a8 100644 --- a/src/widgets/cpu.go +++ b/src/widgets/cpu.go @@ -76,9 +76,10 @@ func (self *CPU) update() { percent, err := psCPU.Percent(self.interval, false) if err != nil { log.Printf("failed to get average CPU usage percent from gopsutil: %v. self.interval: %v. percpu: %v", err, self.interval, false) + } else { + self.Data["AVRG"] = append(self.Data["AVRG"], percent[0]) + self.Labels["AVRG"] = fmt.Sprintf("%3.0f%%", percent[0]) } - self.Data["AVRG"] = append(self.Data["AVRG"], percent[0]) - self.Labels["AVRG"] = fmt.Sprintf("%3.0f%%", percent[0]) }() } @@ -87,15 +88,16 @@ func (self *CPU) update() { percents, err := psCPU.Percent(self.interval, true) if err != nil { log.Printf("failed to get CPU usage percents from gopsutil: %v. self.interval: %v. percpu: %v", err, self.interval, true) - } - if len(percents) == self.Count { - for i, percent := range percents { - k := fmt.Sprintf(self.formatString, i) - self.Data[k] = append(self.Data[k], percent) - self.Labels[k] = fmt.Sprintf("%3.0f%%", percent) - } } else { - log.Printf("error: number of CPU usage percents from gopsutil doesn't match CPU count. percents: %v. self.Count: %v", percents, self.Count) + if len(percents) != self.Count { + log.Printf("error: number of CPU usage percents from gopsutil doesn't match CPU count. percents: %v. self.Count: %v", percents, self.Count) + } else { + for i, percent := range percents { + k := fmt.Sprintf(self.formatString, i) + self.Data[k] = append(self.Data[k], percent) + self.Labels[k] = fmt.Sprintf("%3.0f%%", percent) + } + } } }() } diff --git a/src/widgets/disk.go b/src/widgets/disk.go index 4950c87..e8d8f68 100644 --- a/src/widgets/disk.go +++ b/src/widgets/disk.go @@ -56,6 +56,7 @@ func (self *Disk) update() { Partitions, err := psDisk.Partitions(false) if err != nil { log.Printf("failed to get disk partitions from gopsutil: %v", err) + return } // add partition if it's new diff --git a/src/widgets/net.go b/src/widgets/net.go index 6902c0f..c47ae25 100644 --- a/src/widgets/net.go +++ b/src/widgets/net.go @@ -48,6 +48,7 @@ func (self *Net) update() { interfaces, err := psNet.IOCounters(true) if err != nil { log.Printf("failed to get network activity from gopsutil: %v", err) + return } var curRecvTotal uint64 var curSentTotal uint64 diff --git a/src/widgets/proc_linux.go b/src/widgets/proc_linux.go index dd3cae5..4163391 100644 --- a/src/widgets/proc_linux.go +++ b/src/widgets/proc_linux.go @@ -1,6 +1,7 @@ package widgets import ( + "fmt" "log" "os/exec" "strconv" @@ -8,7 +9,12 @@ import ( ) func (self *Proc) update() { - processes := Processes() + processes, err := Processes() + if err != nil { + log.Printf("failed to retrieve processes: %v", err) + return + } + // have to iterate like this in order to actually change the value for i := range processes { processes[i].CPU /= self.cpuCount @@ -20,10 +26,10 @@ func (self *Proc) update() { self.Sort() } -func Processes() []Process { +func Processes() ([]Process, error) { output, err := exec.Command("ps", "-axo", "pid:10,comm:50,pcpu:5,pmem:5,args").Output() if err != nil { - log.Printf("failed to execute 'ps' command: %v", err) + return nil, fmt.Errorf("failed to execute 'ps' command: %v", err) } // converts to []string, removing trailing newline and header @@ -52,5 +58,5 @@ func Processes() []Process { } processes = append(processes, process) } - return processes + return processes, nil } diff --git a/src/widgets/proc_other.go b/src/widgets/proc_other.go index 6f66dfa..7bb834b 100644 --- a/src/widgets/proc_other.go +++ b/src/widgets/proc_other.go @@ -3,6 +3,7 @@ package widgets import ( + "fmt" "log" "os/exec" "strconv" @@ -10,7 +11,12 @@ import ( ) func (self *Proc) update() { - processes := Processes() + processes, err := Processes() + if err != nil { + log.Printf("failed to retrieve processes: %v", err) + return + } + // have to iterate like this in order to actually change the value for i := range processes { processes[i].CPU /= self.cpuCount @@ -22,10 +28,10 @@ func (self *Proc) update() { self.Sort() } -func Processes() []Process { +func Processes() ([]Process, error) { output, err := exec.Command("ps", "-axo", "pid,comm,pcpu,pmem,args").Output() if err != nil { - log.Printf("failed to execute 'ps' command: %v", err) + return nil, fmt.Errorf("failed to execute 'ps' command: %v", err) } // converts to []string and removes the header strOutput := strings.Split(strings.TrimSpace(string(output)), "\n")[1:] @@ -53,5 +59,5 @@ func Processes() []Process { } processes = append(processes, process) } - return processes + return processes, nil } diff --git a/src/widgets/proc_windows.go b/src/widgets/proc_windows.go index aef97af..f486244 100644 --- a/src/widgets/proc_windows.go +++ b/src/widgets/proc_windows.go @@ -10,6 +10,7 @@ func (self *Proc) update() { psProcesses, err := psProc.Processes() if err != nil { log.Printf("failed to get processes from gopsutil: %v", err) + return } processes := make([]Process, len(psProcesses)) for i, psProcess := range psProcesses { diff --git a/src/widgets/temp_darwin.go b/src/widgets/temp_darwin.go index 9343deb..c1ef665 100644 --- a/src/widgets/temp_darwin.go +++ b/src/widgets/temp_darwin.go @@ -57,6 +57,7 @@ func (self *Temp) update() { sensors, err := SensorsTemperatures() if err != nil { log.Printf("failed to get sensors from CGO: %v", err) + return } for _, sensor := range sensors { if sensor.Temperature != 0 { diff --git a/src/widgets/temp_other.go b/src/widgets/temp_other.go index fa33383..0e5de36 100644 --- a/src/widgets/temp_other.go +++ b/src/widgets/temp_other.go @@ -14,6 +14,7 @@ func (self *Temp) update() { sensors, err := psHost.SensorsTemperatures() if err != nil { log.Printf("failed to get sensors from gopsutil: %v", err) + return } for _, sensor := range sensors { // only sensors with input in their name are giving us live temp info diff --git a/src/widgets/temp_windows.go b/src/widgets/temp_windows.go index c217552..8fabb19 100644 --- a/src/widgets/temp_windows.go +++ b/src/widgets/temp_windows.go @@ -11,6 +11,7 @@ func (self *Temp) update() { sensors, err := psHost.SensorsTemperatures() if err != nil { log.Printf("failed to get sensors from gopsutil: %v", err) + return } for _, sensor := range sensors { if sensor.Temperature != 0 {