12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package sigar
- import (
- "time"
- )
- type ConcreteSigar struct{}
- func (c *ConcreteSigar) CollectCpuStats(collectionInterval time.Duration) (<-chan Cpu, chan<- struct{}) {
- // samplesCh is buffered to 1 value to immediately return first CPU sample
- samplesCh := make(chan Cpu, 1)
- stopCh := make(chan struct{})
- go func() {
- var cpuUsage Cpu
- // Immediately provide non-delta value.
- // samplesCh is buffered to 1 value, so it will not block.
- cpuUsage.Get()
- samplesCh <- cpuUsage
- ticker := time.NewTicker(collectionInterval)
- for {
- select {
- case <-ticker.C:
- previousCpuUsage := cpuUsage
- cpuUsage.Get()
- select {
- case samplesCh <- cpuUsage.Delta(previousCpuUsage):
- default:
- // Include default to avoid channel blocking
- }
- case <-stopCh:
- return
- }
- }
- }()
- return samplesCh, stopCh
- }
- func (c *ConcreteSigar) GetLoadAverage() (LoadAverage, error) {
- l := LoadAverage{}
- err := l.Get()
- return l, err
- }
- func (c *ConcreteSigar) GetMem() (Mem, error) {
- m := Mem{}
- err := m.Get()
- return m, err
- }
- func (c *ConcreteSigar) GetSwap() (Swap, error) {
- s := Swap{}
- err := s.Get()
- return s, err
- }
- func (c *ConcreteSigar) GetFileSystemUsage(path string) (FileSystemUsage, error) {
- f := FileSystemUsage{}
- err := f.Get(path)
- return f, err
- }
|