Fix Battery widget panic (#100)
This commit is contained in:
parent
daf06909db
commit
c5e9511157
|
@ -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)
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user