123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package gosigar
- 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) GetHugeTLBPages() (HugeTLBPages, error) {
- p := HugeTLBPages{}
- err := p.Get()
- return p, err
- }
- func (c *ConcreteSigar) GetFileSystemUsage(path string) (FileSystemUsage, error) {
- f := FileSystemUsage{}
- err := f.Get(path)
- return f, err
- }
- func (c *ConcreteSigar) GetFDUsage() (FDUsage, error) {
- fd := FDUsage{}
- err := fd.Get()
- return fd, err
- }
- // GetRusage return the resource usage of the process
- // Possible params: 0 = RUSAGE_SELF, 1 = RUSAGE_CHILDREN, 2 = RUSAGE_THREAD
- func (c *ConcreteSigar) GetRusage(who int) (Rusage, error) {
- r := Rusage{}
- err := r.Get(who)
- return r, err
- }
|