Files
ctop/connector/collector/mock.go
T

93 lines
1.8 KiB
Go
Raw Normal View History

2017-03-07 02:14:16 +00:00
// +build !release
2017-06-12 14:12:03 +00:00
package collector
2017-01-30 16:25:56 +11:00
import (
"math/rand"
"time"
2017-06-12 14:12:03 +00:00
2017-06-27 15:46:03 +00:00
"github.com/bcicen/ctop/models"
2017-01-30 16:25:56 +11:00
)
2017-06-27 16:21:16 +00:00
const mockLog = "Cura ob pro qui tibi inveni dum qua fit donec amare illic mea, regem falli contexo pro peregrinorum heremo absconditi araneae meminerim deliciosas actionibus facere modico dura sonuerunt psalmi contra rerum, tempus mala anima volebant dura quae o modis."
2017-01-30 16:25:56 +11:00
// Mock collector
type Mock struct {
2017-06-27 15:46:03 +00:00
models.Metrics
stream chan models.Metrics
2017-03-09 09:33:44 +11:00
done bool
running bool
aggression int64
2017-01-30 16:25:56 +11:00
}
2017-03-09 09:33:44 +11:00
func NewMock(a int64) *Mock {
2017-01-30 16:25:56 +11:00
c := &Mock{
2017-06-27 15:46:03 +00:00
Metrics: models.Metrics{},
2017-03-09 09:33:44 +11:00
aggression: a,
2017-01-30 16:25:56 +11:00
}
c.MemLimit = 2147483648
return c
}
2017-02-28 09:28:52 +11:00
func (c *Mock) Running() bool {
return c.running
}
func (c *Mock) Start() {
c.done = false
2017-06-27 15:46:03 +00:00
c.stream = make(chan models.Metrics)
2017-02-28 09:28:52 +11:00
go c.run()
}
func (c *Mock) Stop() {
c.done = true
}
2017-06-27 15:46:03 +00:00
func (c *Mock) Stream() chan models.Metrics {
2017-02-28 09:28:52 +11:00
return c.stream
}
2017-06-27 16:21:16 +00:00
func (c *Mock) StreamLogs() (chan string, error) {
logCh := make(chan string)
go func() {
for {
logCh <- mockLog
time.Sleep(250 * time.Millisecond)
}
}()
return logCh, nil
}
2017-01-30 16:25:56 +11:00
func (c *Mock) run() {
2017-02-28 09:28:52 +11:00
c.running = true
2017-01-30 16:25:56 +11:00
rand.Seed(int64(time.Now().Nanosecond()))
2017-02-28 09:28:52 +11:00
defer close(c.stream)
2017-06-13 20:25:58 +00:00
// set to random static value, once
c.Pids = rand.Intn(12)
c.IOBytesRead = rand.Int63n(8098) * c.aggression
c.IOBytesWrite = rand.Int63n(8098) * c.aggression
2017-01-30 16:25:56 +11:00
for {
2017-03-09 09:33:44 +11:00
c.CPUUtil += rand.Intn(2) * int(c.aggression)
if c.CPUUtil >= 100 {
2017-01-30 16:25:56 +11:00
c.CPUUtil = 0
}
2017-03-09 09:33:44 +11:00
c.NetTx += rand.Int63n(60) * c.aggression
c.NetRx += rand.Int63n(60) * c.aggression
c.MemUsage += rand.Int63n(c.MemLimit/512) * c.aggression
2017-01-30 16:25:56 +11:00
if c.MemUsage > c.MemLimit {
c.MemUsage = 0
}
2017-06-10 13:00:54 +00:00
c.MemPercent = percent(float64(c.MemUsage), float64(c.MemLimit))
2017-01-30 16:25:56 +11:00
c.stream <- c.Metrics
2017-02-28 09:28:52 +11:00
if c.done {
break
}
2017-01-30 16:25:56 +11:00
time.Sleep(1 * time.Second)
}
2017-02-28 09:28:52 +11:00
c.running = false
2017-01-30 16:25:56 +11:00
}