diff --git a/metrics/mock.go b/metrics/mock.go index 5d6b02e..40aa87c 100644 --- a/metrics/mock.go +++ b/metrics/mock.go @@ -8,45 +8,61 @@ import ( // Mock collector type Mock struct { Metrics - stream chan Metrics - done chan bool + stream chan Metrics + done bool + running bool } func NewMock() *Mock { c := &Mock{ Metrics: Metrics{}, - stream: make(chan Metrics), - done: make(chan bool), } c.MemLimit = 2147483648 - go c.run() return c } -func (c *Mock) run() { - rand.Seed(int64(time.Now().Nanosecond())) - for { - c.CPUUtil += rand.Intn(10) - if c.CPUUtil > 100 { - c.CPUUtil = 0 - } - c.CPUUtil += rand.Intn(2) - c.NetTx += rand.Int63n(30) - c.NetRx += rand.Int63n(30) - c.MemUsage += rand.Int63n(c.MemLimit / 16) - if c.MemUsage > c.MemLimit { - c.MemUsage = 0 - } - c.MemPercent = round((float64(c.MemUsage) / float64(c.MemLimit)) * 100) - c.stream <- c.Metrics - time.Sleep(1 * time.Second) - } +func (c *Mock) Running() bool { + return c.running +} + +func (c *Mock) Start() { + c.done = false + c.stream = make(chan Metrics) + go c.run() +} + +func (c *Mock) Stop() { + c.done = true } func (c *Mock) Stream() chan Metrics { return c.stream } -func (c *Mock) Stop() { - c.done <- true +func (c *Mock) run() { + c.running = true + rand.Seed(int64(time.Now().Nanosecond())) + defer close(c.stream) + + for { + c.CPUUtil += rand.Intn(10) + if c.CPUUtil > 100 { + c.CPUUtil = 0 + } + c.CPUUtil += rand.Intn(2) + c.NetTx += rand.Int63n(600) + c.NetRx += rand.Int63n(600) + c.MemUsage += rand.Int63n(c.MemLimit / 16) + if c.MemUsage > c.MemLimit { + c.MemUsage = 0 + } + c.MemPercent = round((float64(c.MemUsage) / float64(c.MemLimit)) * 100) + c.stream <- c.Metrics + if c.done { + break + } + time.Sleep(1 * time.Second) + } + + c.running = false }