diff --git a/circbuffer.go b/circbuffer.go index d4a3eea..12bd7a7 100644 --- a/circbuffer.go +++ b/circbuffer.go @@ -5,10 +5,10 @@ package main // of size N, for any amount of writes, only the last N values // are retained. type CircularBuffer struct { - data []float64 - size int64 - writeCursor int64 - written int64 + data []float64 + size int64 + writeCursor 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 } diff --git a/source_local.go b/source_local.go index adb21a5..150a448 100644 --- a/source_local.go +++ b/source_local.go @@ -1,5 +1,6 @@ package main +// Local is a dummy implementation of the Source interface. type Local struct { } diff --git a/ui.go b/ui.go index 1b65232..d240d86 100644 --- a/ui.go +++ b/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 + var direction string + var max *float64 + switch sparklineIndex { + case rxSparklineIndex: + max = &ui.maxRx + direction = "Rx" + case txSparklineIndex: + max = &ui.maxTx + direction = "Tx" } - 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)) - } - intData = make([]int, len(dataTx)) - - for i := 0; i < len(dataTx)-1; i++ { - intData[i] = int(dataTx[i+1] - dataTx[i]) - } - last = len(dataTx) - 1 - if last > 1 { - currentTotal := dataTx[last] - currentTx := dataTx[last] - dataTx[last-1] - if currentTx > ui.maxTx { - ui.maxTx = currentTx + total := data[last] + current := total - data[last-1] + if current > *max { + *max = current } - 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)) } }