statusmonitor/data.go

63 lines
1.5 KiB
Go

package main
// Should be enough for wide-screen terminals
const HistoryLimit = 1024
// Data holds actual data values, being a buffer for
// UI widges and responsible for flushing/updating/deleting
// old values.
type Data struct {
cpu *CircularBuffer
mem *CircularBuffer
txBytes *CircularBuffer
rxBytes *CircularBuffer
}
// NewData inits new data object.
func NewData() *Data {
return &Data{
cpu: NewCircularBuffer(HistoryLimit),
mem: NewCircularBuffer(HistoryLimit),
txBytes: NewCircularBuffer(HistoryLimit),
rxBytes: NewCircularBuffer(HistoryLimit),
}
}
// AddCPUValue inserts new CPU measurements into data.
func (d *Data) AddCPUValue(value float64) {
d.cpu.Add(value)
}
// AddMemoryStats inserts new memory measurements into data.
func (d *Data) AddMemoryStats(used uint64) {
d.mem.Add(float64(used))
}
// AddNetworkStats inserts new network stats into data.
func (d *Data) AddNetworkStats(rx, tx int64) {
d.rxBytes.Add(float64(rx))
d.txBytes.Add(float64(tx))
}
// CPU returns CPU values.
func (d *Data) CPU() []float64 {
return d.cpu.Data()
}
// MemoryStats returns memory usage stat values.
func (d *Data) MemoryStats() (used []float64) {
return d.mem.Data()
}
// NetworkStats returns network stat values.
func (d *Data) NetworkStats() (rx, tx []float64) {
return d.rxBytes.Data(), d.txBytes.Data()
}
// Clear clears all data.
func (d *Data) Clear() {
for _, b := range [...]*CircularBuffer{d.cpu, d.mem, d.rxBytes, d.txBytes} {
b.Reset()
}
}