Remove code repetition in `UI.UpdateNetstats`
This commit is contained in:
parent
397f6a4cb3
commit
b10243a3c4
|
@ -8,7 +8,7 @@ type CircularBuffer struct {
|
|||
data []float64
|
||||
size int64
|
||||
writeCursor int64
|
||||
written int64
|
||||
writeOpCount int64
|
||||
}
|
||||
|
||||
// NewCircularBuffer creates a new buffer of a given size
|
||||
|
@ -28,7 +28,7 @@ func NewCircularBuffer(size int64) *CircularBuffer {
|
|||
func (b *CircularBuffer) Add(value float64) error {
|
||||
b.data[b.writeCursor] = value
|
||||
b.writeCursor = ((b.writeCursor + 1) % b.size)
|
||||
b.written++
|
||||
b.writeOpCount++
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -37,19 +37,19 @@ func (b *CircularBuffer) Size() int64 {
|
|||
return b.size
|
||||
}
|
||||
|
||||
// TotalWritten provides the total number of values written
|
||||
func (b *CircularBuffer) TotalWritten() int64 {
|
||||
return b.written
|
||||
// TotalWriteOpCount provides the total number of values written
|
||||
func (b *CircularBuffer) TotalWriteOpCount() int64 {
|
||||
return b.writeOpCount
|
||||
}
|
||||
|
||||
// Data returns ordered data from buffer, from old to new.
|
||||
func (b *CircularBuffer) Data() []float64 {
|
||||
switch {
|
||||
case b.written >= b.size && b.writeCursor == 0:
|
||||
case b.writeOpCount >= b.size && b.writeCursor == 0:
|
||||
out := make([]float64, b.size)
|
||||
copy(out, b.data)
|
||||
return out
|
||||
case b.written > b.size:
|
||||
case b.writeOpCount > b.size:
|
||||
out := make([]float64, b.size)
|
||||
copy(out, b.data[b.writeCursor:])
|
||||
copy(out[b.size-b.writeCursor:], b.data[:b.writeCursor])
|
||||
|
@ -64,5 +64,5 @@ func (b *CircularBuffer) Data() []float64 {
|
|||
// Reset resets the buffer so it has no content.
|
||||
func (b *CircularBuffer) Reset() {
|
||||
b.writeCursor = 0
|
||||
b.written = 0
|
||||
b.writeOpCount = 0
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package main
|
||||
|
||||
// Local is a dummy implementation of the Source interface.
|
||||
type Local struct {
|
||||
}
|
||||
|
||||
|
|
62
ui.go
62
ui.go
|
@ -10,11 +10,12 @@ import (
|
|||
|
||||
const headerHeight = 3
|
||||
const (
|
||||
cpuSparklineIndex = 0
|
||||
usedMemSparklineIndex = 1
|
||||
|
||||
rxSparklineIndex = 0
|
||||
txSparklineIndex = 1
|
||||
cpuSparklineIndex = iota
|
||||
usedMemSparklineIndex
|
||||
)
|
||||
const (
|
||||
rxSparklineIndex = iota
|
||||
txSparklineIndex
|
||||
)
|
||||
|
||||
// UI represents UI layout.
|
||||
|
@ -103,40 +104,39 @@ func (ui *UI) UpdateMemoryStats(data []float64) {
|
|||
}
|
||||
|
||||
// UpdateNetstats updates Netstats widget with new values from data.
|
||||
func (ui *UI) UpdateNetstats(dataRx, dataTx []float64) {
|
||||
intData := make([]int, len(dataRx))
|
||||
func (ui *UI) UpdateNetstats(rxData, txData []float64) {
|
||||
ui.updateNetstats(rxSparklineIndex, rxData)
|
||||
ui.updateNetstats(txSparklineIndex, txData)
|
||||
}
|
||||
|
||||
for i := 0; i < len(dataRx)-1; i++ {
|
||||
intData[i] = int(dataRx[i+1] - dataRx[i])
|
||||
func (ui *UI) updateNetstats(sparklineIndex int, data []float64) {
|
||||
intData := make([]int, len(data))
|
||||
|
||||
for i := 0; i < len(data)-1; i++ {
|
||||
intData[i] = int(data[i+1] - data[i])
|
||||
}
|
||||
|
||||
last := len(dataRx) - 1
|
||||
last := len(data) - 1
|
||||
if last > 1 {
|
||||
currentTotal := dataRx[last]
|
||||
currentRx := dataRx[last] - dataRx[last-1]
|
||||
if currentRx > ui.maxRx {
|
||||
ui.maxRx = currentRx
|
||||
}
|
||||
line := &ui.SparklinesRight.Lines[rxSparklineIndex]
|
||||
line.Data = intData
|
||||
line.Title = fmt.Sprintf("Network Rx: %v/s, Max: %v/s (total: %v)", memSize(currentRx), memSize(ui.maxRx), memSize(currentTotal))
|
||||
var direction string
|
||||
var max *float64
|
||||
switch sparklineIndex {
|
||||
case rxSparklineIndex:
|
||||
max = &ui.maxRx
|
||||
direction = "Rx"
|
||||
case txSparklineIndex:
|
||||
max = &ui.maxTx
|
||||
direction = "Tx"
|
||||
}
|
||||
|
||||
intData = make([]int, len(dataTx))
|
||||
|
||||
for i := 0; i < len(dataTx)-1; i++ {
|
||||
intData[i] = int(dataTx[i+1] - dataTx[i])
|
||||
total := data[last]
|
||||
current := total - data[last-1]
|
||||
if current > *max {
|
||||
*max = current
|
||||
}
|
||||
last = len(dataTx) - 1
|
||||
if last > 1 {
|
||||
currentTotal := dataTx[last]
|
||||
currentTx := dataTx[last] - dataTx[last-1]
|
||||
if currentTx > ui.maxTx {
|
||||
ui.maxTx = currentTx
|
||||
}
|
||||
line := &ui.SparklinesRight.Lines[txSparklineIndex]
|
||||
line := &ui.SparklinesRight.Lines[sparklineIndex]
|
||||
line.Data = intData
|
||||
line.Title = fmt.Sprintf("Network Tx: %v/s, Max: %v/s (total: %v)", memSize(currentTx), memSize(ui.maxTx), memSize(currentTotal))
|
||||
line.Title = fmt.Sprintf("Network %s: %v/s, Max: %v/s (total: %v)", direction, memSize(current), memSize(*max), memSize(total))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue