Fix Battery widget panic (#100)

This commit is contained in:
Caleb Bassi 2019-01-30 15:20:09 -08:00
parent daf06909db
commit c5e9511157
7 changed files with 24 additions and 32 deletions

View File

@ -8,38 +8,30 @@ import (
"sync" "sync"
"time" "time"
ui "github.com/cjbassi/gotop/src/termui"
"github.com/distatus/battery" "github.com/distatus/battery"
ui "github.com/cjbassi/gotop/src/termui"
) )
type Batt struct { type Batt struct {
*ui.LineGraph *ui.LineGraph
Count int // number of batteries
interval time.Duration interval time.Duration
} }
func NewBatt(renderLock *sync.RWMutex, horizontalScale int) *Batt { func NewBatt(renderLock *sync.RWMutex, horizontalScale int) *Batt {
batts, err := battery.GetAll()
self := &Batt{ self := &Batt{
LineGraph: ui.NewLineGraph(), LineGraph: ui.NewLineGraph(),
Count: len(batts),
interval: time.Minute, interval: time.Minute,
} }
self.Title = "Battery Status" self.Title = " Battery Status "
self.HorizontalScale = horizontalScale self.HorizontalScale = horizontalScale
if err != nil {
log.Printf("failed to get battery info from system: %v", err)
}
for i, b := range batts {
pc := math.Abs(b.Current/b.Full) * 100.0
self.Data[mkId(i)] = []float64{pc}
}
// intentional duplicate
self.update()
self.update() self.update()
go func() { go func() {
ticker := time.NewTicker(self.interval) for range time.NewTicker(self.interval).C {
for range ticker.C {
renderLock.RLock() renderLock.RLock()
self.update() self.update()
renderLock.RUnlock() renderLock.RUnlock()
@ -57,6 +49,7 @@ func (self *Batt) update() {
batts, err := battery.GetAll() batts, err := battery.GetAll()
if err != nil { if err != nil {
log.Printf("failed to get battery info from system: %v", err) log.Printf("failed to get battery info from system: %v", err)
return
} }
for i, b := range batts { for i, b := range batts {
n := mkId(i) n := mkId(i)

View File

@ -6,8 +6,9 @@ import (
"sync" "sync"
"time" "time"
ui "github.com/cjbassi/gotop/src/termui"
psCPU "github.com/shirou/gopsutil/cpu" psCPU "github.com/shirou/gopsutil/cpu"
ui "github.com/cjbassi/gotop/src/termui"
) )
type CPU struct { type CPU struct {
@ -64,8 +65,7 @@ func NewCPU(renderLock *sync.RWMutex, interval time.Duration, horizontalScale in
self.update() self.update()
go func() { go func() {
ticker := time.NewTicker(self.interval) for range time.NewTicker(self.interval).C {
for range ticker.C {
self.update() self.update()
} }
}() }()

View File

@ -8,9 +8,10 @@ import (
"sync" "sync"
"time" "time"
psDisk "github.com/shirou/gopsutil/disk"
ui "github.com/cjbassi/gotop/src/termui" ui "github.com/cjbassi/gotop/src/termui"
"github.com/cjbassi/gotop/src/utils" "github.com/cjbassi/gotop/src/utils"
psDisk "github.com/shirou/gopsutil/disk"
) )
type Partition struct { type Partition struct {
@ -44,8 +45,7 @@ func NewDisk(renderLock *sync.RWMutex) *Disk {
self.update() self.update()
go func() { go func() {
ticker := time.NewTicker(self.interval) for range time.NewTicker(self.interval).C {
for range ticker.C {
renderLock.RLock() renderLock.RLock()
self.update() self.update()
renderLock.RUnlock() renderLock.RUnlock()

View File

@ -6,9 +6,10 @@ import (
"sync" "sync"
"time" "time"
psMem "github.com/shirou/gopsutil/mem"
ui "github.com/cjbassi/gotop/src/termui" ui "github.com/cjbassi/gotop/src/termui"
"github.com/cjbassi/gotop/src/utils" "github.com/cjbassi/gotop/src/utils"
psMem "github.com/shirou/gopsutil/mem"
) )
type Mem struct { type Mem struct {
@ -29,8 +30,7 @@ func NewMem(renderLock *sync.RWMutex, interval time.Duration, horizontalScale in
self.update() self.update()
go func() { go func() {
ticker := time.NewTicker(self.interval) for range time.NewTicker(self.interval).C {
for range ticker.C {
renderLock.RLock() renderLock.RLock()
self.update() self.update()
renderLock.RUnlock() renderLock.RUnlock()

View File

@ -6,14 +6,16 @@ import (
"sync" "sync"
"time" "time"
psNet "github.com/shirou/gopsutil/net"
ui "github.com/cjbassi/gotop/src/termui" ui "github.com/cjbassi/gotop/src/termui"
"github.com/cjbassi/gotop/src/utils" "github.com/cjbassi/gotop/src/utils"
psNet "github.com/shirou/gopsutil/net"
) )
type Net struct { type Net struct {
*ui.Sparklines *ui.Sparklines
interval time.Duration interval time.Duration
// used to calculate recent network activity // used to calculate recent network activity
prevRecvTotal uint64 prevRecvTotal uint64
prevSentTotal uint64 prevSentTotal uint64
@ -21,10 +23,10 @@ type Net struct {
func NewNet(renderLock *sync.RWMutex) *Net { func NewNet(renderLock *sync.RWMutex) *Net {
recv := ui.NewSparkline() recv := ui.NewSparkline()
recv.Data = []int{0} recv.Data = []int{}
sent := ui.NewSparkline() sent := ui.NewSparkline()
sent.Data = []int{0} sent.Data = []int{}
spark := ui.NewSparklines(recv, sent) spark := ui.NewSparklines(recv, sent)
self := &Net{ self := &Net{
@ -36,8 +38,7 @@ func NewNet(renderLock *sync.RWMutex) *Net {
self.update() self.update()
go func() { go func() {
ticker := time.NewTicker(self.interval) for range time.NewTicker(self.interval).C {
for range ticker.C {
renderLock.RLock() renderLock.RLock()
self.update() self.update()
renderLock.RUnlock() renderLock.RUnlock()

View File

@ -65,8 +65,7 @@ func NewProc(renderLock *sync.RWMutex) *Proc {
self.update() self.update()
go func() { go func() {
ticker := time.NewTicker(self.interval) for range time.NewTicker(self.interval).C {
for range ticker.C {
renderLock.RLock() renderLock.RLock()
self.update() self.update()
renderLock.RUnlock() renderLock.RUnlock()

View File

@ -40,8 +40,7 @@ func NewTemp(renderLock *sync.RWMutex, fahrenheit bool) *Temp {
self.update() self.update()
go func() { go func() {
ticker := time.NewTicker(self.interval) for range time.NewTicker(self.interval).C {
for range ticker.C {
renderLock.RLock() renderLock.RLock()
self.update() self.update()
renderLock.RUnlock() renderLock.RUnlock()