summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaleb Bassi <calebjbassi@gmail.com>2018-02-19 15:02:01 -0800
committerCaleb Bassi <calebjbassi@gmail.com>2018-02-19 15:02:01 -0800
commit3a695dede9f4dd38e2084268caf4422eb8c11f76 (patch)
treeaf3bac9610c857444b3f932d4814f345c5464cc2
parentc483016c16febc60b4d7f4b389c42b7ac093e9ab (diff)
Removed network logic from termui sparkline
-rw-r--r--termui/sparkline.go55
-rw-r--r--widgets/net.go57
2 files changed, 56 insertions, 56 deletions
diff --git a/termui/sparkline.go b/termui/sparkline.go
index 2778505..76d047c 100644
--- a/termui/sparkline.go
+++ b/termui/sparkline.go
@@ -1,16 +1,12 @@
package termui
-import (
- "fmt"
- "github.com/cjbassi/gotop/utils"
-)
-
var SPARKS = [8]rune{'▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'}
// Sparkline is like: ▅▆▂▂▅▇▂▂▃▆▆▆▅▃. The data points should be non-negative integers.
type Sparkline struct {
Data []int
- Title string
+ Title1 string
+ Title2 string
TitleColor Attribute
Total int
LineColor Attribute
@@ -52,47 +48,16 @@ func (sl *Sparklines) Buffer() *Buffer {
// for each line
for i, line := range sl.Lines {
- // Total and current
- y := 2 + (sl.Y/lc)*i
- total := ""
- title := ""
- current := ""
-
- cur := line.Data[len(line.Data)-1]
- curMag := "B"
- if cur >= 1000000 {
- cur = int(utils.BytesToMB(cur))
- curMag = "MB"
- } else if cur >= 1000 {
- cur = int(utils.BytesToKB(cur))
- curMag = "kB"
- }
-
- t := line.Total
- tMag := "B"
- if t >= 1000000000 {
- t = int(utils.BytesToGB(t))
- tMag = "GB"
- } else if t >= 1000000 {
- t = int(utils.BytesToMB(t))
- tMag = "MB"
- }
-
- if i == 0 {
- total = fmt.Sprintf(" Total Rx: %3d %s", t, tMag)
- current = fmt.Sprintf(" Rx/s: %7d %2s/s", cur, curMag)
- } else {
- total = fmt.Sprintf(" Total Tx: %3d %s", t, tMag)
- current = fmt.Sprintf(" Tx/s: %7d %2s/s", cur, curMag)
- }
+ title1Y := 2 + (sl.Y/lc)*i
+ title2Y := (2 + (sl.Y/lc)*i) + 1
- total = MaxString(total, sl.X)
- title = MaxString(current, sl.X)
- buf.SetString(1, y, total, line.TitleColor|AttrBold, sl.Bg)
- buf.SetString(1, y+1, title, line.TitleColor|AttrBold, sl.Bg)
+ title1 := MaxString(line.Title1, sl.X)
+ title2 := MaxString(line.Title2, sl.X)
+ buf.SetString(1, title1Y, title1, line.TitleColor|AttrBold, sl.Bg)
+ buf.SetString(1, title2Y, title2, line.TitleColor|AttrBold, sl.Bg)
// sparkline
- y = (sl.Y / lc) * (i + 1)
+ sparkY := (sl.Y / lc) * (i + 1)
// finds max used for relative heights
max := 1
for i := len(line.Data) - 1; i >= 0 && sl.X-((len(line.Data)-1)-i) >= 1; i-- {
@@ -106,7 +71,7 @@ func (sl *Sparklines) Buffer() *Buffer {
if (sl.X - x) < len(line.Data) {
char = SPARKS[int((float64(line.Data[(len(line.Data)-1)-(sl.X-x)])/float64(max))*7)]
}
- buf.SetCell(x, y, Cell{char, line.LineColor, sl.Bg})
+ buf.SetCell(x, sparkY, Cell{char, line.LineColor, sl.Bg})
}
}
diff --git a/widgets/net.go b/widgets/net.go
index b23dea0..4d7dee3 100644
--- a/widgets/net.go
+++ b/widgets/net.go
@@ -1,30 +1,30 @@
package widgets
import (
+ "fmt"
"time"
ui "github.com/cjbassi/gotop/termui"
+ "github.com/cjbassi/gotop/utils"
ps "github.com/shirou/gopsutil/net"
)
type Net struct {
*ui.Sparklines
- interval time.Duration
+ interval time.Duration
+ recvTotal int
+ sentTotal int
}
func NewNet() *Net {
recv := ui.NewSparkline()
- recv.Title = "Receiving"
recv.Data = []int{0}
- recv.Total = 0
sent := ui.NewSparkline()
- sent.Title = "Transfering"
sent.Data = []int{0}
- sent.Total = 0
spark := ui.NewSparklines(recv, sent)
- n := &Net{spark, time.Second}
+ n := &Net{spark, time.Second, 0, 0}
n.Label = "Network Usage"
go n.update()
@@ -43,14 +43,49 @@ func (n *Net) update() {
recv := int(interfaces[0].BytesRecv)
sent := int(interfaces[0].BytesSent)
- if n.Lines[0].Total != 0 { // if this isn't the first update
- curRecv := recv - n.Lines[0].Total
- curSent := sent - n.Lines[1].Total
+ if n.recvTotal != 0 { // if this isn't the first update
+ curRecv := recv - n.recvTotal
+ curSent := sent - n.sentTotal
n.Lines[0].Data = append(n.Lines[0].Data, curRecv)
n.Lines[1].Data = append(n.Lines[1].Data, curSent)
}
- n.Lines[0].Total = recv
- n.Lines[1].Total = sent
+ n.recvTotal = recv
+ n.sentTotal = sent
+
+ for i := 0; i < 2; i++ {
+ var method string
+ var total int
+ cur := n.Lines[i].Data[len(n.Lines[i].Data)-1]
+ totalUnit := "B"
+ curUnit := "B"
+
+ if i == 0 {
+ total = n.recvTotal
+ method = "Rx"
+ } else {
+ total = n.sentTotal
+ method = "Tx"
+ }
+
+ if cur >= 1000000 {
+ cur = int(utils.BytesToMB(cur))
+ curUnit = "MB"
+ } else if cur >= 1000 {
+ cur = int(utils.BytesToKB(cur))
+ curUnit = "kB"
+ }
+
+ if total >= 1000000000 {
+ total = int(utils.BytesToGB(total))
+ totalUnit = "GB"
+ } else if total >= 1000000 {
+ total = int(utils.BytesToMB(total))
+ totalUnit = "MB"
+ }
+
+ n.Lines[i].Title1 = fmt.Sprintf(" Total %s: %3d %s", method, total, totalUnit)
+ n.Lines[i].Title2 = fmt.Sprintf(" %s/s: %7d %2s/s", method, cur, curUnit)
+ }
}